我刚刚在MDN上看到JS由于所有"双精度64位格式IEEE 754值"而处理数字的怪癖之一就是当你做的事情就像.2 + .1你得到的那样0.30000000000000004(这就是文章的内容,但我得到了0.29999999999999993在Firefox).因此:
(.2 + .1) * 10 == 3
Run Code Online (Sandbox Code Playgroud)
评估为false.
这似乎是非常有问题的.那么可以做些什么来避免由于JS中不精确的十进制计算而导致的错误?
我注意到,如果你这样做,1.2 + 1.1你会得到正确的答案.那么你应该避免任何涉及小于1的数值的数学吗?因为这似乎非常不切实际.在JS中进行数学运算还有其他危险吗?
编辑:
我知道许多小数部分不能存储为二进制,但我遇到的大多数其他语言似乎处理错误(如JS处理大于1的数字)似乎更直观,所以我不是习惯了这就是为什么我想看看其他程序员如何处理这些计算.