首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript错误地更改了简单乘法的结果。我怎么才能修复它?

Javascript错误地更改了简单乘法的结果。我怎么才能修复它?
EN

Stack Overflow用户
提问于 2017-01-18 16:12:53
回答 1查看 117关注 0票数 3

代码语言:javascript
复制
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,但是做不出来。

EN

回答 1

Stack Overflow用户

发布于 2017-01-18 16:35:46

另一个天真的尝试,因为这里的函数是天花板。这试图使误差因子将数字降低ε倍,以使我们得到6.9999999。而不是7.00000000..1

又是一次天真的尝试!

代码语言:javascript
复制
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))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41714263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档