我试图通过使用_.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>