我是一名长期的 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,是否有任何内置方法、函数等可以使用特定区域性将字符串转换为 double ? 或者至少暗示我们可能正在处理不同格式的转换?
我们仍在研究如何写入该值,并看看是否可以对过程进行逆向工程以获得一致的结果。但是,我们的客户已经拥有一种格式或另一种格式(或两者,我们正在检查...)的数据,因此此时正确的转换算法或实现将是更好的答案。
最佳答案
我过去曾使用过这个快速而肮脏的函数来从文本中获取 double 值。在阿根廷,人们有时使用点,有时使用逗号来分隔小数值,因此该函数可以接受两种格式。如果仅存在一个标点符号,则假定它是小数点分隔符。
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
关于VB6 - 使用特定区域性将字符串转换为 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814066/