【问题标题】:How can I handle float number correctly in JS?如何在 JS 中正确处理浮点数?
【发布时间】:2021-09-27 13:51:33
【问题描述】:

在 JS 中,我确实有一个来自 php 的浮点数,如下所示:

var number = 2,206.00

在 JS 中,我需要使用 parseFloat 那个数字。

所以我尝试了parseFloat(number),但它只给了2。那么我怎样才能得到2206.00而不是2?

【问题讨论】:

  • In JS, I do have a float number which come from php as below: var number = 2,206.00 是如何生成的? (在 PHP 中,, 也是一个运算符,并且将 .00 用作浮点数也没有意义,因此在 PHP 中,数字也将是 2206 而不是 2,206.00。)
  • @t.niese,在 php 中我使用了number_format($myNumber, 2),这就是为什么它会这样。
  • 完整的var number = 2,206.00 是如何生成的?或者您如何从 PHP 端获取 2,206.00 并将其存储在 number 中?
  • @t.niese,它来自 ajax 响应
  • 好的,然后在这些地方应用该格式。但是数据应该在没有本地化的情况下传输。

标签: javascript parsefloat


【解决方案1】:

Number.parseFloatglobalThis.parseFloat 是同一个函数对象。

如果globalThis.parseFloat 遇到的字符不是:

  • 加号或,
  • 减号或,
  • 小数点或,
  • 指数(Ee

...它返回该字符之前的值,忽略无效字符及其后面的字符。第二个小数点也会停止解析。

所以下面打印2。这似乎是你的问题。

console.log(parseFloat('2,206.00')) // 2

解决方案:使用字符串操作从数字中删除任何逗号(在解析之前确实是String

console.log(parseFloat('2,206.00'.replaceAll(',', ''))) // 2206

如果您需要将值存储为数字但将其呈现为格式化字符串,则可能需要Number#toFixed 来呈现小数点后的值:

console.log((2206).toFixed(2)) // '2206.00'

最后一点:注意本地化,因为有些国家/地区使用逗号作为小数点,使用小数点作为数字分组。正如@t.niese 所说:在没有本地化的情况下存储数值,然后在应用程序的表面应用本地化。但这是一个更广泛、更复杂的话题。

【讨论】:

    【解决方案2】:

    您必须先删除逗号并使用parseFloat

    点后大约 2 位小数,我看到你在 PHP 中使用 number_format($myNumber, 2),所以在 JS 中,你使用 .toFixed(2)

    var number = '2,206.00';
    var result = parseFloat(number.replace(/,/g, '')).toFixed(2);
    console.log(result);

    【讨论】:

      【解决方案3】:

      首先,您目前最有可能在 JS 中触发 Unexpected number 错误。

      生成的值似乎来自返回字符串的number_format() PHP 函数。此外,var number 变量也应该被视为字符串,因为我们有字符串格式。

      所以首先你应该引用 var number = '2,206.00' 之后,你必须使字符串类似于浮点数以便将其解析为浮点数,所以我们应该用空字符串替换 , 以使数字变为 2206.00 number = number.replace(",","")。最后,现在应该完成解析,以便将类似浮点的字符串转换为实际的浮点 parseFloat(number)

      完整代码:

      var number = '2,206.00';
      number.replace(",","");
      number = parseFloat(number);
      

      【讨论】:

        【解决方案4】:

        好的,基本上你想要一个像 (20.03) 这样的点后面的两位小数, 试试这个

        parseFloat(number).toFixed(2)
        

        【讨论】:

          猜你喜欢
          • 2019-08-26
          • 2018-09-20
          • 2015-09-07
          • 1970-01-01
          • 2021-05-22
          • 1970-01-01
          • 1970-01-01
          • 2021-08-07
          • 1970-01-01
          相关资源
          最近更新 更多