Vil*_*lx- 43 javascript syntax parsing decimal-point
当我编写一段处理一些浮点值的JavaScript代码时,一个想法让我感到震惊.JavaScript中的小数点符号是什么?它总是.吗?还是文化特有的?并且怎么样.toFixed()和.parseFloat()?如果我正在处理用户输入,则可能包含本地特定于文化的小数点分隔符号.
最终,我想编写支持用户输入中的两个小数点的代码 - 特定于文化.,但如果我不知道JavaScript期望什么,我就不能编写这样的代码.
补充:好的,Rubens Farias 建议查看类似的问题,其中有一个很好的接受答案:
function whatDecimalSeparator() {
var n = 1.1;
n = n.toLocaleString().substring(1, 2);
return n;
}
Run Code Online (Sandbox Code Playgroud)
这很好,它让我得到locale小数点.毫无疑问,迈向解决方案的一步.
现在,剩下的部分将是确定行为.parseFloat()是什么.几个答案指出,对于浮点文字只有.有效.是否.parseFloat()采取同样的方式?或者它可能在某些浏览器中需要本地小数点分隔符?是否有任何不同的方法来解析浮点数?我应该推出我自己的即将到来的吗?
And*_*y E 21
根据规范,DecimalLiteral定义为:
DecimalLiteral ::
DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt
. DecimalDigits ExponentPartopt
DecimalIntegerLiteral ExponentPartopt
Run Code Online (Sandbox Code Playgroud)
并且为了满足parseFloat参数:
因此numberString成为trimmedString的最长前缀,它满足StrDecimalLiteral的语法,这意味着它在输入中找到的第一个可解析的文字字符串数.只能.用于指定浮点数.如果您接受来自不同语言环境的输入,请使用字符串替换:
function parseLocalNum(num) {
return +(num.replace(",", "."));
}
Run Code Online (Sandbox Code Playgroud)
该函数使用一元运算符而不是parseFloat,因为在我看来,您希望对输入严格. parseFloat("1ABC")将是1,而使用一元运算符+"1ABC"返回NaN.这使得验证输入变得更加容易.使用parseFloat只是猜测输入格式正确.
jsp*_*cal 12
使用:
theNumber.toLocaleString();
Run Code Online (Sandbox Code Playgroud)
获得具有正确的十进制和千位分隔符的格式正确的字符串
| 归档时间: |
|
| 查看次数: |
48465 次 |
| 最近记录: |