62

我对 JavaScript 的 parseFloat 函数在世界不同地区的默认行为有疑问。

在美国,如果你在字符串“123.34”上调用 parseFloat,你会得到一个浮点数 123.34。

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

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

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

4

4 回答 4

74

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

它只解析.,

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

parseFloat 规范

于 2012-10-02T16:36:59.057 回答
15

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

于 2012-10-02T16:38:51.633 回答
4

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

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

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

于 2012-10-02T16:43:50.557 回答
0

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

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

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

于 2022-03-04T17:19:27.683 回答