从数字中删除无用的尾随零?

我错过了一个标准的API调用,从数字中删除尾随无关紧要的零吗?

防爆。

var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001

Number.toFixed()和Number.toPrecision()不是我正在寻找的。


如果将其转换为字符串,它将不会显示任何尾随零,这些尾随零并不存储在变量中,因为它是作为数字创建的,而不是字符串。

var n = 1.245000
var noZeroes = n.toString() // "1.245" 

我有一个类似的例子,我想在必要时使用.toFixed() ,但是当它不是的时候我不想填充。 所以我最终将parseFloat和toFixed一起使用。

固定没有填充

parseFloat(n.toFixed(4));

另一种选择几乎完成同样的事情
这个答案可能有助于你的决定

Number(n.toFixed(4));

toFixed会将数字截断/填充到特定的长度,但也会将其转换为字符串。 将其转换回数字类型不仅会使数字更安全地使用数字,而且还会自动删除任何尾随0。 例如:

var n = "1.234000";
    n = parseFloat(n);
 // n is 1.234 and in number form

因为即使你定义了一个尾随零的数字,它们也会被丢弃。

var n = 1.23000;
 // n == 1.23;

我首先使用了matti-lyra和gary的答案组合:

r=(+n).toFixed(4).replace(/.0+$/,'')

结果:

  • 1234870.98762341:“1234870.9876”
  • 1230009100:“1230009100”
  • 0.0012234:“0.0012”
  • 0.1200234:“0.12”
  • 0.000001231:“0”
  • 0.10001:“0.1000”
  • “asdf”:“NaN”(所以没有运行时错误)
  • 有些问题的情况是0.10001。 我结束了使用这个更长的版本:

        r = (+n).toFixed(4);
        if (r.match(/./)) {
          r = r.replace(/.?0+$/, '');
        }
    
  • 1234870.98762341:“1234870.9876”
  • 1230009100:“1230009100”
  • 0.0012234:“0.0012”
  • 0.1200234:“0.12”
  • 0.000001231:“0”
  • 0.10001:“0.1”
  • “asdf”:“NaN”(所以没有运行时错误)
  • 更新 :这是Gary的新版本(见评论):

    r=(+n).toFixed(4).replace(/([0-9]+(.[0-9]+[1-9])?)(.?0+$)/,'$1')
    

    这给出了与上述相同的结果。

    链接地址: http://www.djcxy.com/p/77455.html

    上一篇: Remove insignificant trailing zeros from a number?

    下一篇: In jQuery, what's the best way of formatting a number to 2 decimal places?