我有两个负值 -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);

答案 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;
答案 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)
请检查,这有助于您了解这背后的逻辑: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
答案 3 :(得分:0)
此功能将值四舍五入。例如。如果值在9.080到9.084之间,则结果为9.08;如果值为9.085到9.089,则结果为9.09。
答案 4 :(得分:0)