【问题标题】:JavaScript parseFloat in Different Cultures不同文化中的 JavaScript parseFloat
【发布时间】:2012-09-23 13:15:28
【问题描述】:

我有一个关于 JavaScript 的 parseFloat 函数在世界不同地区的默认行为的问题。

在美国,如果您对字符串“123.34”调用 parseFloat,您将得到一个浮点数 123.34。

如果我在瑞典或巴西开发代码,并且他们使用逗号而不是句点作为小数分隔符,则 parseFloat 函数需要“123,34”还是“123.34”。

请注意,我不是在问如何在美国解析不同文化的数字格式。我在问瑞典或巴西的 parseFloat 的行为是否与在美国的行为相同,或者它是否期望本地格式的数字?或者为了更好地考虑这一点,巴西/瑞典的开发人员在从文本框中提取文本后是否必须将字符串转换为英文格式才能使用 parseFloat?

如果这没有意义,请告诉我。

【问题讨论】:

    标签: javascript culture


    【解决方案1】:

    parseFloat 不使用您的语言环境定义,而是使用十进制文字的定义。

    它只解析. 而不是,

    我是巴西人,在解析十进制数字之前,我必须用点替换逗号。

    parseFloat specification

    【讨论】:

    • 问题已回答。非常感谢大家的帮助!
    【解决方案2】:

    不,parseFloat is specified 解析 DecimalLiterals,它使用点作为小数分隔符。它不依赖于当前环境的区域设置。

    【讨论】:

      【解决方案3】:

      不仅仅是瑞典/巴西。 F.ex 在美国,他们经常添加大量逗号,例如$5,762,325.25

      parseFloat 函数本质上处理小数,而不是语言环境字符串。

      一般来说,JavaScript 有时可以将通用字符串/数字/日期转换为区域设置友好的格式,但反之则不行。

      【讨论】:

        【解决方案4】:

        如果您确定它是巴西格式,只需在解析之前将数字转换为美国格式即可。

        function parseItalianNumber(stringNum) {
            return parseFloat(stringNum.replace(".","").replace(",","."));
        }
        

        在意大利,我们也使用 .作为千位分隔符。这会删除任何千位分隔符,以防万一(您不希望周围有很多点),然后在调用 parseFloat 之前将逗号转换为点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多