经典的ASP FormatNumber古怪

时间:2009-09-17 14:31:59

标签: asp-classic localization vbscript

我们最近有一个用经典ASP编写的国际化应用程序。以下代码复制了该问题。记录集中该字段的值为“8.90”,并键入为varchar(255)。

session.LCID = 2057
nNumber = recMessages.fields(lCounter)
Response.Write nNumber '' # prints 8.90
Response.Write FormatNumber(8.90) '' # prints 8.90
Response.Write FormatNumber(nNumber) '' # prints 8.90

session.LCID = 1034
nNumber = recMessages.fields(lCounter)
Response.Write nNumber '' # prints 8.90
Response.Write FormatNumber(8.90) '' # prints 8,90
Response.Write FormatNumber(nNumber) '' # prints 890,00!

这里发生了什么?为什么某些语言环境会将数字乘以1000?

3 个答案:

答案 0 :(得分:4)

从您提供的内容看起来就像是。在8.90被视为千分隔符。 LCID 1034是西班牙语吗?

我不确定,但我认为如果您检查该区域设置的数字格式,则会使用句点作为分隔符。

干杯

答案 1 :(得分:0)

在不同的语言环境中,不同的字符用作十进制和千位分隔符。虽然点(。)是2057语言环境中的小数分隔符,但它很可能在1034语言环境中用作千位分隔符。

要解决此问题,您可以尝试使用特定于语言环境的小数分隔符替换字段值中的点字符。我不确定,但这样的事情应该有效:

session.LCID = 1034
strDecSep = Mid(CStr(CDbl(3/2)), 2, 1)
nNumber = recMessages.fields(lCounter)
nNumber = Replace(nNumber, ".", strDecSep)

答案 2 :(得分:0)

并不是它乘以1000.该数字被格式化为该国家的货币格式。 例如在美国,1234.56的格式为1,234.56美元,在西班牙的数字为1.234,56