我对 JavaScript 的 parseFloat 函数在世界不同地区的默认行为有疑问。
在美国,如果您对字符串“123.34”调用 parseFloat,您将得到浮点数 123.34。
如果我在瑞典或巴西开发代码,并且他们使用逗号而不是句点作为小数分隔符,则 parseFloat 函数是否期望“123,34”或“123.34”。
请注意,我不是问如何解析美国不同文化的数字格式。我问的是,瑞典或巴西的 parseFloat 的行为是否与美国境内的行为相同,或者它是否期望本地格式的数字?或者为了更好地考虑这一点,巴西/瑞典的开发人员是否必须将字符串转换为英文格式,然后才能在从文本框中提取文本后使用 parseFloat ?
如果这没有意义,请告诉我。
不仅仅是瑞典/巴西。 F.ex 在美国,他们经常添加大量逗号,例如
$5,762,325.25
。
parseFloat
函数本质上处理小数,而不是区域设置字符串。
一般来说,JavaScript 有时可以将通用字符串/数字/日期转换为区域友好格式,但反之则不然。
如果您确定是巴西格式,只需在解析之前将号码转换为美国格式即可。
function parseItalianNumber(stringNum) {
return parseFloat(stringNum.replaceAll(".","").replaceAll(",","."));
}
在意大利我们也使用 .作为千位分隔符。这会删除所有千位分隔符,以防万一(您不希望周围有很多点),然后在调用 parseFloat 之前将逗号转换为点。
补充 FrancescoMM 给出的答案,您必须使用正则表达式来处理非常大的数字。使用字符串作为参数的 String.replace 将仅替换第一次出现的位置。所以 999.999.999,99 变成 999999.999.99
stringNum.replace(/\./g, "").replace(/\,/g, ".")
来源:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace