我正面临一个问题,如果有人向我解释我的功能出了什么问题,我将很乐意。

参见下面的代码:

如果我运行=> 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/

10-09 20:57