我试图通过使用_.round将数字显示为百分比,然后将该数字乘以100。出于某种原因,当我将四舍五入的数字相乘时,精度就搞砸了。看起来是这样的:

var num = 0.056789,
    roundingPrecision = 4,
    roundedNum = _.round(num, roundingPrecision),
    percent = (roundedNum * 100) + '%';

console.log(roundedNum); // 0.0568
console.log(percent); // 5.680000000000001%

fiddle

为什么在乘以100后将0.000000000000001加到数字上?

最佳答案

这是由于以下事实:数字在内部以有限的精度表示为二进制数字。

另请参阅"Is floating point math broken?"

浮点数学是否已损坏?



哪个得到了答案:



为了获得正确的结果,您需要对所有算法进行四舍五入:

var num = 0.056789,
  roundingPrecision = 4,
  roundedNum = _.round(num * 100, roundingPrecision),
  percent = roundedNum + '%';

console.log(percent); // 5.0569%
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>

09-25 19:49