将负值舍入到2位小数

时间:2016-09-29 11:03:07

标签: javascript math decimal

我有两个负值 -0.245 -9.085 。我想让它们到2位小数。我正在使用JavaScript函数 toFixed() ,但得到了一些奇怪的结果。

请帮助我理解第一个例子背后的逻辑被舍入" down"但第二个是四舍五入的" up"



//Examples 1. result coming as expected
var num = -0.245
var n = num.toFixed(2); //-0.24
console.log(n);

//Examples 2. result should be -9.08
num = -9.085
n = num.toFixed(2); //-9.09
console.log(n);




5 个答案:

答案 0 :(得分:3)

按照说明  在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed 提及:

  

如有必要,数字将四舍五入,如果需要,小数部分用零填充,以使其具有指定的长度。

对于-0.245.toFixed(2),该值为负,2位小数后的值为-0.045,-0.045高于-0.05,因此结果向上舍入为-0.24

对于-9.085.toFixed(2),该值为负,2位小数后的值为-0.085,-0.085小于-0.08,因此结果向下舍入为-9.09

以下是对于负值总是向上舍入到2位小数的解决方案。



var num = -9.085
var output = num < 0 ? Math.floor(Math.abs(num) * 100) * -1 / 100 : num.toFixed(2)
console.log(output) //-9.08
&#13;
&#13;
&#13;

答案 1 :(得分:1)

  

toFixed()返回numObj的字符串表示形式,该表示形式不使用指数表示法,并且在小数位后面具有正确的位数。 如有必要,数字将四舍五入,如果需要,小数部分会用零填充,以使其具有指定的长度。

这意味着结果没有错,但是你期望toFixed()做一些不同的事情。 如果将-9.085舍入到小数点后第二位,则数学正确结果为-9.09(.5向上舍入下一个小数)。 你要完成的是删除第二个小数后的所有内容,可以通过以下方式完成:

parseInt(-9.085 * 100) / 100 //-9.08

alert(parseInt(-9.085 * 100) / 100)

答案 2 :(得分:0)

答案 3 :(得分:0)

此功能将值四舍五入。例如。如果值在9.080到9.084之间,则结果为9.08;如果值为9.085到9.089,则结果为9.09。

答案 4 :(得分:0)

enter image description here

  parseFloat(Math.round(num * 100) / 100).toFixed(2);