Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取2位浮点数不是';他没有按预期工作_Javascript - Fatal编程技术网

Javascript 获取2位浮点数不是';他没有按预期工作

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,我只想得到两个浮动数字,所以这个数字应该是-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)/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,那么第二个会更短。这也会使正数向上舍入。截断是“四舍五入到零”。