我正面临一个问题,如果有人向我解释我的功能出了什么问题,我将很乐意。
参见下面的代码:
如果我运行=> number(10000.88,2)
谁能解释我为什么输出10000.87而不是10000.88
如果我运行数字(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>
最佳答案
这是一个舍入误差,使用双精度或浮点数不能保证准确性。
关于javascript - 格式化数字,精确到两位小数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32014033/