JavaScript中的小数点分隔符号是什么?

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参数:

  1. 让inputString为ToString(string).
  2. 设trimmedString是inputString的子字符串,由最左边的字符(不是StrWhiteSpaceChar)和该字符右边的所有字符组成.(换句话说,删除前导空格.)
  3. 如果trimmedString和trimmedString的任何前缀都不满足StrDecimalLiteral的语法(参见9.3.1),则返回NaN.
  4. 设numberString是trimmedString的最长前缀,它可能是trimmedString本身,它满足StrDecimalLiteral的语法.
  5. 返回MV的Number值

因此numberString成为trimmedString的最长前缀,它满足StrDecimalLiteral的语法,这意味着它在输入中找到的第一个可解析的文字字符串数.只能.用于指定浮点数.如果您接受来自不同语言环境的输入,请使用字符串替换:

function parseLocalNum(num) {
    return +(num.replace(",", "."));
}
Run Code Online (Sandbox Code Playgroud)

该函数使用一元运算符而不是parseFloat,因为在我看来,您希望对输入严格. parseFloat("1ABC")将是1,而使用一元运算符+"1ABC"返回NaN.这使得验证输入变得更加容易.使用parseFloat只是猜测输入格式正确.

  • 是.任何语言环境中的`parseFloat("1,01")`将返回"1",而不是"1.01" (4认同)
  • Mozilla开发人员中心说:"parseFloat解析其参数,一个字符串,并返回一个浮点数.如果遇到符号(+或 - ),数字(0-9),小数点或指数以外的字符,它返回到该点的值,并忽略该字符和所有后续字符.允许前导和尾随空格." https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/parseFloat (4认同)

jsp*_*cal 12

使用:

theNumber.toLocaleString();
Run Code Online (Sandbox Code Playgroud)

获得具有正确的十进制和千位分隔符的格式正确的字符串