Javascript 获取2位浮点数不是';他没有按预期工作
我有这个数字:-0.0166667,我只想得到两个浮动数字,所以这个数字应该是-0.01 我试过这个Javascript 获取2位浮点数不是';他没有按预期工作,javascript,Javascript,我有这个数字:-0.0166667,我只想得到两个浮动数字,所以这个数字应该是-0.01 我试过这个 -0.0166667.toFixed(2) # gives : -0.02 还有这个 Math.round(-0.0166667 * 100) / 100 # also gives : -0.02 但它们都将数字转换为-0.02,而不是-0.01 这里怎么了?使用|按位或截断分数部分 var x=(-0.0166667*100 | 0)/100, y=(0.0166667*100 | 0
-0.0166667.toFixed(2) # gives : -0.02
还有这个
Math.round(-0.0166667 * 100) / 100 # also gives : -0.02
但它们都将数字转换为-0.02,而不是-0.01
这里怎么了?使用
|
按位或截断分数部分
var x=(-0.0166667*100 | 0)/100,
y=(0.0166667*100 | 0)/100;
写(x+'
'+y)代码>对于小于零的数字,Math.ceil
截断而不舍入,对于大于零的数字,Math.floor
工作正常。由于您的数字小于zer,因此请改用Math.ceil
Math.ceil(-0.0166667*100)/100
编辑
编写一个自定义帮助器方法来截断浮点
function truncate(num) {
return num > 0 ? Math.floor(num) : Math.ceil(num);
}
若要将数字四舍五入2位数,请使用
truncate(num*100)/100
Math.round
将数字舍入到最接近的整数,因此代码的输出实际上是正确的。您需要的是截断而不是舍入。以下是最简单的方法:
函数为零(x){
返回x>0?数学地板(x):数学天花板(x);
}
函数round2digits(x){
归零(x*100)/100;
}
document.write(round2digits(-0.0166));//打印“-0.01”
这样您就不需要舍入,而是截断?现在无法让jsPerf工作,但我不明白如果您只是截断,为什么子字符串()在这里不工作按位操作可以工作,但它可能会丢失信息。这可以用于3个精度数字吗?(好奇)如果ie和safari支持Math.sign,那么第二个会更短。这也会使正数向上舍入。截断是“四舍五入到零”。