什么是JavaScript中的小数点分隔符?
当我写一段处理一些浮点值的JavaScript代码时,一个想法让我感到震惊。 什么是JavaScript中的小数点符号? 是否永远.
? 或者是文化特定的? 那么.toFixed()
和.parseFloat()
呢? 如果我正在处理用户input,则可能会包含本地文化特定的小数点分隔符。
最终我想编写支持用户input的两个小数点的代码 – 文化特定和.
,但是我不能写这样的代码,如果我不知道JavaScript的期望。
补充:好的,鲁本斯·法里亚斯( Rubens Farias) build议看看类似的问题 ,这个问题有一个简洁的接受答案:
function whatDecimalSeparator() { var n = 1.1; n = n.toLocaleString().substring(1, 2); return n; }
这很好,它让我得到区域的小数点。 毫无疑问,迈出了一步。
现在,剩下的部分将是确定.parseFloat()
的行为。 有几个答案指出,只适用于浮点文字.
已validation。 .parseFloat()
行为是一样的吗? 或者可能需要在某些浏览器中使用本地小数点分隔符? 是否有任何不同的parsing浮点数的方法? 我是否应该推出我自己的即将确定?
根据规范,DecimalLiteral被定义为:
DecimalLiteral :: DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt . DecimalDigits ExponentPartopt DecimalIntegerLiteral ExponentPartopt
并满足parseFloat参数:
- 让inputString是ToString(string)。
- 让trimmedString是一个inputString的子string,它由不是StrWhiteSpaceChar的最左边的字符和该字符右边的所有字符组成(换句话说,删除前导空格)。
- 如果trimmedString和trimmedString的前缀均不满足StrDecimalLiteral的语法(见9.3.1),则返回NaN。
- 让numberString是trimmedString的最长前缀,它可以是trimmedString本身,它满足StrDecimalLiteral的语法。
- 返回MV的数字值
因此,numberString成为trimmedString的最长前缀,满足StrDecimalLiteral的语法,这意味着它在input中find的第一个可parsing的文字string编号。 只有.
可以用来指定一个浮点数。 如果您接受来自不同地区的input,请使用stringreplace:
function parseLocalNum(num) { return +(num.replace(",", ".")); }
该函数使用一元运算符而不是parseFloat,因为在我看来,您要对input进行严格的处理。 parseFloat("1ABC")
将是1
,而使用一元运算符+"1ABC"
将返回NaN
。 这使validationinput更容易。 使用parseFloat只是猜测input的格式是正确的。
使用:
theNumber.toLocaleString();
以正确的小数点和千位分隔符来获得格式正确的string
据我所知,JavaScript本身只知道的.
分隔符为小数。 至less有一个人对JS的东西有信心: