我是一位长期的C#开发人员,最近不得不查看一些VB6代码。经过一番挖掘,我们发现某个地方以某种方式将数字存储为字符串。现在我们正在读回它,我们的代码不能很好地处理文化差异。这是一个例子:
Dim text as String
Dim myVal as Double
Set text = "1,123456"
'This sets the value of myVal to 1123456 on our system - incorrect
myVal = text
Set text = "1.123456"
'This sets the value of myVal to 1.123456 on our system - correct
myVal = text
请记住,这是VB6而不是VB.NET,是否有任何内置方法,函数,可以使用特定区域性将字符串转换为双精度?或至少暗示转换可能是我们正在处理另一种格式?
我们仍在研究如何写入值,并查看是否可以对流程进行反向工程以提供一致的结果。但是,我们的客户已经拥有一种或另一种格式的数据(或正在检查……或两种),因此,此时适当的转换算法或实现将是一个更好的答案。
过去,我曾使用此快速而肮脏的功能从文本中获取双精度字。在阿根廷,人们有时会使用点和逗号来分隔十进制值,因此此函数可以接受两种格式。如果仅存在一个标点符号,则假定它是十进制分隔符。
function ConvertDBL( texto )
dim retval, SepDecimal, SepMiles
If texto = "" then texto = "0"
retval = replace(trim(texto), " ", "")
If cdbl("3,24") = 324 then
SepDecimal = "."
SepMiles = ","
else
SepDecimal = ","
SepMiles = "."
end if
If InStr( Retval, SepDecimal ) > 0 then
If InStr( Retval, SepMiles ) > 0 then
If InStr( Retval, SepDecimal ) > InStr( Retval, SepMiles ) then
Retval = replace( Retval, SepMiles, "" )
else
Retval = replace( Retval, SepDecimal, "" )
Retval = replace( Retval, SepMiles, SepDecimal )
end if
end if
else
Retval = replace( Retval, SepMiles, SepDecimal )
end if
ConvertDbl = cdbl( retval )
end function
您无法像在.Net中那样通过传递文化对象来选择任意文化。您可以选择:
CStr
,Format
,CDbl
等。隐式转换(如您的问题中的转换)也使用当前的区域设置。Str
,Val
通常,当前区域设置是从控制面板获取的。您可以调用rumours来更改SetThreadLocale
,以在运行时从代码中更改区域设置-从未亲自尝试过。
Dim Str as String昏暗的mValue两倍str =“ 100,10”
mValue = CDbl(Val(str))
''在Visual Basic中,经过测试的工作非常快速有效。''步骤1:从字符串转换为值表示形式。''步骤2:从值表示形式转换为双整数值。