我是否错过了从数字中删除尾随无关紧要的零的标准 API 调用?
var x = 1.234000; // to become 1.234
var y = 1.234001; // stays 1.234001
Number.toFixed()
并且Number.toPrecision()
不是我正在寻找的。
我是否错过了从数字中删除尾随无关紧要的零的标准 API 调用?
var x = 1.234000; // to become 1.234
var y = 1.234001; // stays 1.234001
Number.toFixed()
并且Number.toPrecision()
不是我正在寻找的。
我有一个类似的例子,我想.toFixed()
在必要的地方使用,但我不想要填充。所以我最终将 parseFloat 与 toFixed 结合使用。
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;
如果将其转换为字符串,它将不会显示任何尾随零,这些零一开始就没有存储在变量中,因为它是作为数字创建的,而不是字符串。
var n = 1.245000
var noZeroes = n.toString() // "1.245"
我首先结合使用了 matti-lyra 和 gary 的答案:
r=(+n).toFixed(4).replace(/\.0+$/,'')
结果:
有点问题的情况是 0.10001。我最终使用了这个更长的版本:
r = (+n).toFixed(4);
if (r.match(/\./)) {
r = r.replace(/\.?0+$/, '');
}
更新:这是加里的新版本(见评论):
r=(+n).toFixed(4).replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,'$1')
这给出了与上面相同的结果。
toFixed
如有必要,该方法将进行适当的舍入。它还会添加尾随零,这并不总是理想的。
(4.55555).toFixed(2);
//-> "4.56"
(4).toFixed(2);
//-> "4.00"
如果将返回值转换为数字,则将删除那些尾随零。这是一种比自己进行四舍五入或截断数学运算更简单的方法。
+(4.55555).toFixed(2);
//-> 4.56
+(4).toFixed(2);
//-> 4
像这样乘以一怎么样?
var x = 1.234000*1; // becomes 1.234
var y = 1.234001*1; // stays as 1.234001