【发布时间】:2015-08-15 00:41:23
【问题描述】:
我遇到了一个问题,如果有人解释我的功能出了什么问题,我会很高兴。
请看下面的代码:
如果我运行 => number(10000.88, 2)
谁能解释一下为什么要输出 10000.87 而不是 10000.88
如果我在哪里运行 number(11111.88, 2) 输出是正确的 11111.88 所有其他输出都是正确的。
function number(value, decPos) {
return Math.floor(Math.abs(value) * Math.pow(10, decPos)) / Math.pow(10, decPos);
}
document.write("<div>" + number(10, 2) + '</div>');
document.write("<div>" + number(10.8888, 2) + '</div>');
document.write("<div>" + number(100.8888, 2) + '</div>');
document.write("<div>" + number(1000.88, 2) + '</div>');
document.write("<div>" + number(10000.888, 2) + '</div>');
// magic
document.write("<div>" + number(10000.88, 2) + '</div>');
document.write("<div>" + number(100000.8888, 2) + '</div>');
// magic
document.write("<div>" + number(8368.88, 2) + '</div>');
document.write("<div>" + number(11111.8888, 2) + '</div>');
document.write("<div>" + number(11111.88, 2) + '</div>');
<div id="result"></div>
【问题讨论】:
-
你知道有 toFixed() 吗?
-
使用 toFixed 不会解决我的问题,因为数字不仅可以有 2 个小数点,例如 (1111.88787).toFixed(2) 将等于 1111.89
-
我删除了
Math.floor(,这适用于第一个舍入错误,因为它正在删除小数,10000.88 * 100返回1000087.999999而不是预期的1000088
标签: javascript math