【问题标题】:parseFloat not working with zero after decimalparseFloat 不能在小数点后使用零
【发布时间】:2016-01-18 13:59:00
【问题描述】:

我有一个文本框,形成我需要将 float 值传递给 api 的文本框。

现在,当文本框中的值为“18.575”或“18.09483”时,一切正常。

但如果值为“18.000”,则无法正常工作。我知道 18.000 与 18 相同,但我需要精确数字。

所以问题是 我在 JavaScript 中需要精确的 18.00 而不是 18

我试过了

a) parseFloat

  parseFloat("18.000");  // I get 18

b) 固定

 (18).toFixed(2) // I get `"18.00"` but it is string and doesn't solve the purpose.

c) 编号

Number("18.00") // 给出 18 而不是 18.00

提前感谢您的帮助

【问题讨论】:

  • 在表达式中使用时使用数字,向用户显示时使用字符串。
  • 号码18.000与号码18完全相同。换句话说,这两者的内部表示是逐位相同的。二进制浮点表示不能保留精度信息。你必须找到一个定点库。
  • @Tushar ,我试过号码,但它也不起作用
  • 18.00 只能作为字符串存在。作为数字或浮点数,它是 18。
  • 那么你将不得不使用字符串,而不是数字,并且解析为数字没有意义

标签: javascript jquery floating-point numbers precision


【解决方案1】:

原生 JSON 不提供指定浮点精度的方法,您可以通过操纵编码的 json 字符串来解决这个问题,例如

    data = {
        something: 18
    };
    
    json = JSON.stringify(data, function(key, val) {
        if(typeof(val) === 'number')
            return '<<<' + val.toFixed(3) + '>>>';
        return val;
    }).replace(/"<<<|>>>"/g, '');

    document.write(json)

这有点傻,但有效

【讨论】:

  • 添加然后删除分隔符有什么意义?回调不能只返回.toFixed()的(字符串)结果吗?
  • @Pointy:问题不是很清楚,但我猜他们的后端(可能用 php 编写)要求浮点数始终包含小数点。因此"foo":"18.00""foo":18 都不起作用。
  • 对,但是.toFixed() 已经返回了一个字符串,而不是一个数字。
  • 没有分隔符,我会在我的 json 中得到 "foo":"18.00" 而我需要 "foo":18.00
  • 但是......当你使用 分隔符时,无论如何你都会在 JSON 中得到 "18.00"。如果不是,那就没有意义了,因为我们又回到了数字表示的问题。
【解决方案2】:

试试

parseFloat((18).toFixed(2))

【讨论】:

  • @shankaran 它不工作,它正在转换为字符串
猜你喜欢
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多