float number math problem addition and subtraction
我知道javascript在数学方面有一个众所周知的问题,它会导致数学问题返回错误的不稳定的十进制数字。但是如何在JS中进行简单的加法和减法,却没有一个奇怪的结果呢?加减数不是固定数,而是变量的传递数。例如。。。
附加
1 2 3 4
| var a = 3.94
var b = 0.5
var r = a + b
console.log(r) //4.4399999999999995 |
减去
1 2 3 4
| var a = 4.22
var b = 0.5
var r = a - b
console.log(r) //3.7199999999999998 |
号
我知道JS中的数学浮点问题,但我正在寻找一个简单的解决方案,在做一些加法和减法时不要出现这个问题。
浮点运算是否中断?
- stackoverflow.com/questions/1458633/…
- 我不知道你的问题,JS和许多其他语言以及CPU都是基于IEEE763浮点运算,所以十进制的3.94必须转换成这种二进制格式,请参阅binary convert.com/convert_float.html,这在十进制中并不完全相同。
- 使用tofixed。var r=数字((a+b).tofixed(2))
- 你引用了另一个问题,我认为这个问题解释得很好。有什么你不明白的地方吗?
- @如果你能用你自己的话再问这个问题,对我们会有帮助的。在第一篇文章中似乎有一些高质量的答案,我现在要否决这个。但是如果你编辑来询问细节,我会重新访问
- @斯蒂芬,他没有问"为什么?"但对于"如何解决",不确定是否有助于点/重复投票的答案,没有帮助的行动。
- @巫师锤这些是"他的话"?不知道他怎么能改进他的问题,事实上这是很有道理的。是的,有一些高质量的答案,但这不是一个拒绝投票的理由,而是一个欺骗投票的理由。
- @Stephenp&;wizardhammer:我了解问题及其原因,但我想在做加法和减法时解决问题。在有关这方面的相关文章中,我找不到使加法(A+B)或减法(A-B)起作用的答案。
- hama21-我承认@jonas comment的有效性;我的链接是关于解释而不是关于缓解-其他链接的"可能的重复"注释确实涉及缓解,例如epascarello的链接指向使用专用库或使用.toPrecision(...)……这真的取决于你的用途和目标。在我职业生涯的早期,我在金融部门工作,我们用整数计算1/100美分,从来没有用过浮点。这并不是说"javascript在数学上有一个臭名昭著的问题"——它是任何语言的限制。
- @你的评论很有道理。当我读到你最初的问题时。您所问的问题似乎是"浮点数学是否已损坏?"我不认为这是你想问的。这就是为什么我建议重新考虑这个问题。
- @我指的是"浮点数学坏了吗?"现在看来这并不是被问到的问题。我在上面的一个段落中看到了第二个问题,"但是如何在JS中做一个简单的加法和减法,并且没有一个奇怪的结果?"我建议这是主要的问题,如果是这样的话,请澄清。这是我的改进建议
- 这是我的改进建议。1。将问题移到底部。2。重新确定为阳性。三。把问题从背后和暗号中分开。
多亏了@stakvino的建议,我想我明白了。
告诉我你们的想法。
附加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 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) |
减法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 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方法不使用+或之类的运算符来做加法和减法?-
- 不,那是不可能的(除非你做移位,但我不建议这样做)