Tim*_*ins 7 javascript rounding percentage floating-point-precision lodash
我试图通过使用_.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%
Run Code Online (Sandbox Code Playgroud)
为什么在乘以100后将0.000000000000001添加到数字?
这是因为数字在内部表示为具有有限精度的二进制数.
另请参阅"浮点数学是否已损坏?"
浮点数学是否破碎?
0.1 + 0.2 == 0.3 - >假
0.1 + 0.2 - > 0.30000000000000004
任何想法为什么会这样?
得到了答案:
二进制浮点数学是这样的.在大多数编程语言中,它基于IEEE 754标准.JavaScript使用64位浮点表示,与Java相同
double.问题的关键在于数字以这种格式表示为2的幂的整数倍; 有理数(例如0.1,它1/10)的分母不是2的幂,不能准确表示.
为了在您的案例中得到正确的结果,您需要在所有算术后舍入:
var num = 0.056789,
roundingPrecision = 4,
roundedNum = _.round(num * 100, roundingPrecision),
percent = roundedNum + '%';
console.log(percent); // 5.0569%Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)