VB6 - 使用特定区域性将字符串转换为 double ?

标签 vb6 localization type-conversion

我是一名长期的 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/

相关文章:

c++ - 从 int 到 shared_ptr 的隐式转换

c# - 不可测量外部过程的渐近进度条?

VB6 - 如何在运行时捕获异常或错误

python - 在 python 中调用 vb dll

localization - 如何参数化复合组件中的 requiredMessage 属性?

ios - 如何在 Xcode 中维护多个本地化文件

ios - NSString float ……如果NSString不是数字并且包含字母数字字符,会发生什么?

c++ - 为什么在代码段中从 char* 转换为 std::string 比转换为 const char* 更受欢迎?

vb6 - Visual Basic 6 仍然被广泛使用吗?

c# - 在 Entity Framework Code First 中建模本地化数据