【问题标题】:float number math problem addition and subtraction [duplicate]浮点数数学题加减法[重复]
【发布时间】:2019-03-18 00:47:35
【问题描述】:

我知道 JavaScript 有一个臭名昭著的数学问题,它可能导致数学问题返回错误的十进制数。但是如何在 JS 中进行简单的加法和减法而不产生不稳定的结果呢?加法和减法的数字不是固定数字,而是依赖于变量。比如……

加法

var a = 3.94
var b = 0.5
var r = a + b
console.log(r) //4.4399999999999995

减法

var a = 4.22
var b = 0.5
var r = a - b
console.log(r) //3.7199999999999998

我知道 JS 中的数学浮点问题,但我正在寻找一个简单的解决方案,以便在进行一些加法和减法时不会出现此问题。

Is floating point math broken?

【问题讨论】:

  • 使用 toFixed。 var r = Number((a + b).toFixed(2))
  • 引用了另一个我认为explains the issue pretty well的问题。那里的答案有什么你不明白的地方吗?
  • @stephen 他没有问“为什么?”但是对于“如何解决”,不确定是否有帮助指出/欺骗投票给对 OP 没有帮助的答案。
  • @wizardHammer 这些是“他的话”吗?不知道他怎么能改进他的问题,这实际上是非常正确的。是的,那里有一些高质量的答案,但这不是拒绝投票的理由,而是欺骗投票的理由。

标签: javascript math add subtraction


【解决方案1】:

感谢@Stakvino 的建议,我想我明白了。

让我知道你们的想法。

加法

var a = 3.94
var b = 0.5

var fixed = String(a)

if (fixed.indexOf('.') === -1) {
    fixed = 0;
}

else {
    fixed = fixed.split('.')
    fixed = fixed[1].length;
}



var r = (a + b).toFixed(fixed)
console.log(r)

减法

var a = 4.22
var b = 0.5

var fixed = String(a)

if (fixed.indexOf('.') === -1) {
    fixed = 0;
}

else {
    fixed = fixed.split('.')
    fixed = fixed[1].length;
}



var r = (a - b).toFixed(fixed)
console.log(r)

【讨论】:

  • 不适用于a = 5, b = 3.5
  • 有没有不使用+或-等运算符的JS方法做加减法
  • 不,那是不可能的(除非你做位移,但我不建议这样做)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
相关资源
最近更新 更多