此问题在此处已有答案:
Is floating point math broken?(31个答案)
上个月关门了。
我在Elixir中观察到一些意外的浮点行为。
4.7 / 0.1 = 47.0 (good!)
4.8 / 0.1 = 47.9999999999 (bad!)
4.9 / 0.1 = 49 (good!)
虽然我理解fp精度的局限性,但在这种情况下,答案看起来是错误的。
奇怪的是,我在python中也尝试了这一点,得到了同样的结果,这更加神秘,当我把格式改为4.8 * (1/0.1)
时,我得到了正确的答案(48.0)。
这是怎么回事?
2条答案
按热度按时间bqujaahr1#
这实际上是IEEE 754浮点数的正常行为,与erlang/elixil. Python或Nodejs无关,它们会返回相同的结果。
有关详细信息,请阅读此详细说明。
zlwx9yxi2#
虽然我理解fp精度的局限性
显然不是:-)
与往常一样,如果需要小数精度,请使用Decimal: