大家好!现在有一个问题迟迟解决不了,希望大家帮忙。我在给西班牙的一家公司编写一套财务系统,因为这边有中国人也有西班牙人,因此要兼顾所有的客户的习惯。众所周知,在欧洲这边如果表示10.50欧元这个金额,老外的习惯是写成10,50的形式,也就是小数点位用,表示,而不是.。这样的问题是如果我的用户是西班牙人,他们的默认键盘和区域设定什么的都是西班牙语状态的,这样他们在录入或者是开发票的时候,将会打入成10,50的形式,但是这时候系统(我指的是西班牙语版的或者是英文版的XP)只要曾经安装过东亚语言的附加支持,那么此时老外的计算机上面的小键盘0数字右边的小数点就自动固定成了“.”,而不是他们习惯的“,”了,而且再也该不回来了(至少我没找到改过来的办法,控制面板什么的我都研究过了)。此时的问题就随之而来,系统会自动把老外输入的10.50识别成1050,也就是数值扩大了十倍。造成最后的结果肯定出现问题。我用的是textbox控件,即便用format函数限定数字样式也没用。
现在我想,问问大家有没有一个API可以测定这台计算机目前是使用什么国家代码,以及目前是处于什么键盘方案下,这样我就可以根据不同的设定,做一个case来修正数值了。
等候大家的帮助,谢谢!顺祝圣诞、新年快乐!!
Simon
现在我想,问问大家有没有一个API可以测定这台计算机目前是使用什么国家代码,以及目前是处于什么键盘方案下,这样我就可以根据不同的设定,做一个case来修正数值了。
等候大家的帮助,谢谢!顺祝圣诞、新年快乐!!
Simon
解决方案 »
- 谁有类似于listview的自定义控件?
- 请问怎么把十六进制浮点数转换为十进制浮点数?急~~~在线等..
- 关于游戏数据内存地址
- 看看我的一个程序,谁能给改成用数据库做的
- VB中有延時函數
- 过程参数传递问题
- 这语句有什么错呀!data1.RecordSource = "select * from tablename where louyu like '%" & Trim(textSKEY.Text) & "%' order by id"
- 进销存系统的先进先出设计思路
- 我的记事本最小化时报错:运行时错误 '380': 无效属性值 哪儿出问题了?
- 我过生日,心情还不错,所以来给大家送点分!希望你们也有个好心情 :)
- VB 获取图片中的数字50个Q币做为答谢(或50元)
- 在VB中,如何获取软件的安装路径
GetLocaleInfo LOCALE_USER_DEFAULT
西班牙语系有20种分支。但大概有5,6中表达方法。
mvLCID=LCIDPublic Function FormatCurrency(CurVal As Double, Optional UseGrouping As Boolean = True, Optional ShowCSymbol As Boolean = True) As String
Dim NumDigits As Integer
Dim LeadingZero As Integer
Dim Grouping As Integer
Dim decSep As String
Dim thouSep As String
Dim negOrder As Integer
Dim posOrder As Integer
Dim cSymb As String
Dim posIntVal As Double, intStr As String
Dim posDecVal As Double, decStr As String
Dim negNum As Boolean, i As Integer
Dim fCur As String NumDigits = CInt(pfGLI(LOCALE_IDIGITS))
LeadingZero = CInt(pfGLI(gliILZERO))
Grouping = CInt(Left(pfGLI(gliSGROUPING), 1))
decSep = Left(pfGLI(gliSDECIMAL), 1)
thouSep = Left(pfGLI(gliSTHOUSAND), 1)
negOrder = CInt(pfGLI(gliINEGCURR))
posOrder = CInt(pfGLI(gliICURRENCY))
cSymb = pfGLI(gliSCURRENCY) If Not ShowCSymbol Then cSymb = "" If CurVal < 0 Then negNum = True
posIntVal = Abs(Fix(CurVal))
posDecVal = Abs(CurVal - Fix(CurVal)) * (10 ^ NumDigits) intStr = Format(posIntVal, "#############################################")
decStr = Format(posDecVal, String(NumDigits, "0")) If UseGrouping And Grouping > 0 And Len(intStr) > Grouping Then
' Insert the ordinal separators in the integer part of the number
For i = Grouping To Len(intStr) Step Grouping + 1
intStr = Left(intStr, Len(intStr) - i) + thouSep + Right(intStr, i)
Next
End If ' Final format
If negNum Then
Select Case negOrder
Case 0
fCur = "(" + cSymb + intStr + decSep + decStr + ")"
Case 1
fCur = "-" + cSymb + intStr + decSep + decStr
Case 2
fCur = cSymb + "-" + intStr + decSep + decStr
Case 3
fCur = cSymb + intStr + decSep + decStr + "-"
Case 4
fCur = "(" + intStr + decSep + decStr + cSymb + ")"
Case 5
fCur = "-" + intStr + decSep + decStr + cSymb
Case 6
fCur = intStr + decSep + decStr + "-" + cSymb
Case 7
fCur = intStr + decSep + decStr + cSymb + "-"
Case 8
fCur = "-" + intStr + decSep + decStr + " " + cSymb
Case 9
fCur = "-" + cSymb + " " + intStr + decSep + decStr
Case 10
fCur = intStr + decSep + decStr + " " + cSymb + "-"
Case 11
fCur = cSymb + " " + intStr + decSep + decStr + "-"
Case 12
fCur = cSymb + " -" + intStr + decSep + decStr
Case 13
fCur = intStr + decSep + decStr + "- " + cSymb
Case 14
fCur = "(" + cSymb + " " + intStr + decSep + decStr + ")"
Case 15
fCur = "(" + intStr + decSep + decStr + " " + cSymb + ")"
Case Else
fCur = "-" + cSymb + intStr + decSep + decStr
End Select
Else
Select Case posOrder
Case 0
fCur = cSymb + intStr + decSep + decStr
Case 1
fCur = intStr + decSep + decStr + cSymb
Case 2
fCur = cSymb + " " + intStr + decSep + decStr
Case 3
fCur = intStr + decSep + decStr + " " + cSymb
Case Else
fCur = cSymb + intStr + decSep + decStr
End Select
End If FormatCurrency = Trim(fCur)End FunctionPrivate Function pfGLI(reqInfo As GLITypes, _
Optional ByVal bUnicode As Boolean = False) As String Dim aStr As String aStr = String(255, Chr(0))
If bUnicode Then
GetLocaleInfoW mvLCID, reqInfo, StrPtr(aStr), 255
pfGLI = aStr 'StrConv(aStr, vbFromUnicode)
Else
GetLocaleInfo mvLCID, reqInfo, aStr, 255
aStr = Left(aStr, InStr(1, aStr, Chr(0)) - 1)
pfGLI = aStr
End IfEnd Function' This just makes my life a little easier
Private Enum GLITypes
gliICALENDARTYPE = &H1009
gliIOPTIONALCALENDAR = &H100B
gliICENTURY = &H24
gliICOUNTRY = &H5
gliICURRDIGITS = &H19
gliICURRENCY = &H1B
gliIDATE = &H21
gliIDAYLZERO = &H26
gliIDEFAULTCODEPAGE = &HB
gliIDEFAULTCOUNTRY = &HA
gliIDEFAULTLANGUAGE = &H9
gliIDIGITS = &H11
gliIINTLCURRDIGITS = &H1A
gliILANGUAGE = &H1
gliILDATE = &H22
gliILZERO = &H12
gliIMEASURE = &HD
gliIMONLZERO = &H27
gliINEGCURR = &H1C
gliINEGSEPBYSPACE = &H57
gliINEGSIGNPOSN = &H53
gliINEGSYMPRECEDES = &H56
gliIPOSSEPBYSPACE = &H55
gliIPOSSIGNPOSN = &H52
gliIPOSSYMPRECEDES = &H54
gliITIME = &H23
gliITLZERO = &H25
gliNOUSEROVERRIDE = &H80000000
gliS1159 = &H28
gliS2359 = &H29
gliSABBREVCTRYNAME = &H7
gliSABBREVDAYNAME1 = &H31
gliSABBREVDAYNAME2 = &H32
gliSABBREVDAYNAME3 = &H33
gliSABBREVDAYNAME4 = &H34
gliSABBREVDAYNAME5 = &H35
gliSABBREVDAYNAME6 = &H36
gliSABBREVDAYNAME7 = &H37
gliSABBREVLANGNAME = &H3
gliSABBREVMONTHNAME1 = &H44
gliSABBREVMONTHNAME10 = &H4D
gliSABBREVMONTHNAME11 = &H4E
gliSABBREVMONTHNAME12 = &H4F
gliSABBREVMONTHNAME13 = &H100F
gliSABBREVMONTHNAME2 = &H45
gliSABBREVMONTHNAME3 = &H46
gliSABBREVMONTHNAME4 = &H47
gliSABBREVMONTHNAME5 = &H48
gliSABBREVMONTHNAME6 = &H49
gliSABBREVMONTHNAME7 = &H4A
gliSABBREVMONTHNAME8 = &H4B
gliSABBREVMONTHNAME9 = &H4C
gliSCOUNTRY = &H6
gliSCURRENCY = &H14
gliSDATE = &H1D
gliSDAYNAME1 = &H2A
gliSDAYNAME2 = &H2B
gliSDAYNAME3 = &H2C
gliSDAYNAME4 = &H2D
gliSDAYNAME5 = &H2E
gliSDAYNAME6 = &H2F
gliSDAYNAME7 = &H30
gliSDECIMAL = &HE
gliSENGCOUNTRY = &H1002
gliSENGLANGUAGE = &H1001
gliSGROUPING = &H10
gliSINTLSYMBOL = &H15
gliSLANGUAGE = &H2
gliSLIST = &HC
gliSLONGDATE = &H20
gliSMONDECIMALSEP = &H16
gliSMONGROUPING = &H18
gliSMONTHNAME1 = &H38
gliSMONTHNAME10 = &H41
gliSMONTHNAME11 = &H42
gliSMONTHNAME12 = &H43
gliSMONTHNAME2 = &H39
gliSMONTHNAME3 = &H3A
gliSMONTHNAME4 = &H3B
gliSMONTHNAME5 = &H3C
gliSMONTHNAME6 = &H3D
gliSMONTHNAME7 = &H3E
gliSMONTHNAME8 = &H3F
gliSMONTHNAME9 = &H40
gliSMONTHOUSANDSEP = &H17
gliSNATIVECTRYNAME = &H8
gliSNATIVEDIGITS = &H13
gliSNATIVELANGNAME = &H4
gliSNEGATIVESIGN = &H51
gliSPOSITIVESIGN = &H50
gliSSHORTDATE = &H1F
gliSTHOUSAND = &HF
gliSTIME = &H1E
gliSTIMEFORMAT = &H1003
End Enum...