当我编写一段处理一些浮点值的JavaScript代码时,一个想法让我感到震惊。 JavaScript中的小数点符号是什么?总是.
吗?还是文化特有的?那么.toFixed()
和.parseFloat()
呢?如果我正在处理用户输入,则可能包含本地文化特定的小数点分隔符号。
最终,我想编写支持用户输入中的两个小数点的代码 - 特定于文化和.
,但如果我不知道JavaScript期望什么,我就不能编写这样的代码。< / p>
已添加:确定,Rubens Farias suggests查看similar question,其答案很简洁:
function whatDecimalSeparator() {
var n = 1.1;
n = n.toLocaleString().substring(1, 2);
return n;
}
这很好,它让我得到locale小数点。毫无疑问,迈向解决方案迈出了一步。
现在,剩下的部分是确定.parseFloat()
的行为。几个答案指出,对于浮点文字,只有.
有效。 .parseFloat()
的行为方式是否相同?或者它可能在某些浏览器中需要本地小数点分隔符?是否有任何不同的方法来解析浮点数?我应该推出自己刚刚确定的吗?
答案 0 :(得分:21)
根据规范,DecimalLiteral定义为:
DecimalLiteral ::
DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt
. DecimalDigits ExponentPartopt
DecimalIntegerLiteral ExponentPartopt
并且用于满足parseFloat参数:
因此numberString成为trimmedString的最长前缀,它满足StrDecimalLiteral的语法,这意味着它在输入中找到的第一个可解析的文字字符串数。只有.
可用于指定浮点数。如果您接受来自不同语言环境的输入,请使用字符串替换:
function parseLocalNum(num) {
return +(num.replace(",", "."));
}
该函数使用一元运算符而不是parseFloat,因为在我看来,您希望对输入严格。 parseFloat("1ABC")
为1
,而使用一元运算符+"1ABC"
会返回NaN
。这使得验证输入变得更加容易。使用parseFloat只是猜测输入格式正确。
答案 1 :(得分:12)
使用:
theNumber.toLocaleString();
使用正确的小数和千位分隔符获取格式正确的字符串
答案 2 :(得分:2)
据我所知,javascript本身只知道小数的.
分隔符。至少有一个人相信我对JS事物的判断同意: