确保字符串数字操作与文化无关
Making sure string numbers operations are culture independent
我通过 XmlHttp
请求下载汇率,该请求作为 string
(作为 <div>
元素的 .innerText
)进入代码并表示double
键入数字:1.525
.
构建此脚本时,我是在具有英语文化模型的 OS 上完成的(即 1.525
表示 1 个单位和 0.525 位小数)。
但是,此脚本现在将 运行 用于法语 OS,它使用逗号 ,
而不是 .
来分隔小数点。
这意味着,如果 .
而不是 ,
,操作 Application.Evaluate(10000/myRate)
将失败。
简单的解决方案是替换“.”。通过 Application.Evaluate(10000/Replace(myRate,".",",")
加上“,”。然而,这显然不太好,因为现在脚本在英语系统上会失败。
有了 VB.NET
,我可以通过像这样转换它来使其独立于文化:
myRate.ToDouble(System.Globalization.CultureInfo.InvariantCulture)
我已经尝试谷歌搜索 VBA 替代方案一段时间但没有成功;有谁知道是否有比替换“.”更优雅的方式来国际化我的脚本?用“,”?
这是我目前的解决方案(我不太喜欢):
On Error Resume Next
test = CDbl(myRate)/2
If Err.Number <> 0 Then
myRate = Replace(myRate,".",",")
On Error GoTo 0
End If
使用 Application.DecimalSeparator
属性?
Application.Evaluate(10000/CDbl(Replace(myRate,".", Application.DecimalSeparator))
您可以使用 Application 对象临时更改小数点和千位分隔符。
读取几个当前 OS(国际)设置:Application.International(index) property
要更改:
Application.ThousandsSeparator = "."
在 MS Access 中,我们没有 Application.DecimalSeparator
、Application.ThousandsSeparator
或 Application.International
。我们只有 Val(vString)
和 Str(vNumber)
。他们都使用英语(不变)文化转换参数。
因此,在 MS Access 中,OP 的问题可以这样解决:
vResult = 10000/Val(myRate)
我通过 XmlHttp
请求下载汇率,该请求作为 string
(作为 <div>
元素的 .innerText
)进入代码并表示double
键入数字:1.525
.
构建此脚本时,我是在具有英语文化模型的 OS 上完成的(即 1.525
表示 1 个单位和 0.525 位小数)。
但是,此脚本现在将 运行 用于法语 OS,它使用逗号 ,
而不是 .
来分隔小数点。
这意味着,如果 .
而不是 ,
,操作 Application.Evaluate(10000/myRate)
将失败。
简单的解决方案是替换“.”。通过 Application.Evaluate(10000/Replace(myRate,".",",")
加上“,”。然而,这显然不太好,因为现在脚本在英语系统上会失败。
有了 VB.NET
,我可以通过像这样转换它来使其独立于文化:
myRate.ToDouble(System.Globalization.CultureInfo.InvariantCulture)
我已经尝试谷歌搜索 VBA 替代方案一段时间但没有成功;有谁知道是否有比替换“.”更优雅的方式来国际化我的脚本?用“,”?
这是我目前的解决方案(我不太喜欢):
On Error Resume Next
test = CDbl(myRate)/2
If Err.Number <> 0 Then
myRate = Replace(myRate,".",",")
On Error GoTo 0
End If
使用 Application.DecimalSeparator
属性?
Application.Evaluate(10000/CDbl(Replace(myRate,".", Application.DecimalSeparator))
您可以使用 Application 对象临时更改小数点和千位分隔符。
读取几个当前 OS(国际)设置:Application.International(index) property
要更改:
Application.ThousandsSeparator = "."
在 MS Access 中,我们没有 Application.DecimalSeparator
、Application.ThousandsSeparator
或 Application.International
。我们只有 Val(vString)
和 Str(vNumber)
。他们都使用英语(不变)文化转换参数。
因此,在 MS Access 中,OP 的问题可以这样解决:
vResult = 10000/Val(myRate)