我有可能是一个边缘案例场景.当试图将值舍入4.015到2位小数时,我总是最终得到4.01而不是预期的4.02.对于具有.015小数部分的所有数字,这种情况始终如一.
我在JS中使用了一个相当常见的方法:
val = Math.round(val * 100) / 100;
Run Code Online (Sandbox Code Playgroud)
我认为问题在乘以100时开始.浮点不准确导致该值向下舍入而不是向上.
var a = 4.015, // 4.015
mult = a * 100, // 401.49999999999994 (the issue)
round = Math.round(mult), // 401
result = round / 100; // 4.01 (expected 4.02)
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/eVXRL/
如果我尝试回合,这个问题就不会发生4.025.期望值4.03确实回归; 它只是一个问题.015(到目前为止).
有没有办法优雅地解决这个问题?当然只有.015一次性寻找和处理这种情况的黑客,但这似乎是错误的!