function roundUp(num, precision) {
return Math.ceil(num * precision) / precision;
}
var num = 0.07;
var precision = 100;
console.log(roundUp(num, precision));
当函数的参数是7.000000000001和100时,"num * precision“乘法会得到类似于”0.07“的结果,而ceil函数会将其向上舍入为8。
我该如何解决这个问题呢?我有big.js,但是做不出来。
发布于 2017-01-18 16:35:46
另一个天真的尝试,因为这里的函数是天花板。这试图使误差因子将数字降低ε倍,以使我们得到6.9999999。而不是7.00000000..1
又是一次天真的尝试!
function roundUp(num, precision) {
return Math.ceil((num * precision) - (num * precision * Number.EPSILON)) / precision;
}
console.log(roundUp(0.07, 100))
console.log(roundUp(0.03, 100))
console.log(roundUp(0.002, 1000))
console.log(roundUp(0.00222, 1000))
console.log(roundUp(0.006, 1000))
console.log(roundUp(0.00600000000000000000001, 10000000000000000000));//broken
console.log(roundUp(0.006001, 10000000));
console.log(roundUp(0.0333, 1000))
console.log(roundUp(0.07777777, 10))
console.log(roundUp(0.07777777, 100))
console.log(roundUp(0.07777777, 1000))
console.log(roundUp(0.07777777, 10000))
console.log(roundUp(0.07777777, 100000))
console.log(roundUp(0.07777777, 1000000))
console.log(roundUp(0.33333333333333, 1000000))
https://stackoverflow.com/questions/41714263
复制相似问题