我的输出是这样的 -
ruby-1.9.2-p290 :011 > 2.32 * 3
=> 6.959999999999999
我记得有时回到另一台机器上,我得到了它......2.32 * 3 = 6
我的错误是什么?非常感谢您阅读本文。:)
我的输出是这样的 -
ruby-1.9.2-p290 :011 > 2.32 * 3
=> 6.959999999999999
我记得有时回到另一台机器上,我得到了它......2.32 * 3 = 6
我的错误是什么?非常感谢您阅读本文。:)
如果您真的想四舍五入为整数,那么只需
(3 * 2.32).to_i
但我认为这不太可能。通常你只想将稍微不精确的浮点数格式化为这样的东西
"%0.2f" % (3 * 2.32)
=> "6.96"
如果您真的想使用精确的表示,那么您可以使用BigDecimal。
require 'BigDecimal'
(3 * BigDecimal.new("2.32")).to_s("F")
=> "6.96"
PS。推荐阅读http://floating-point-gui.de/DS。
我不能告诉你关于 Ruby 的事,所以请原谅我。但坦率地说,原则保持不变,所以我希望这会有所帮助:
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 2.32 * 3
6.959999999999999
如您所见,Python 也是如此。
System.out.println(2.32 * 3);
6.959999999999999
Java 也是如此!那么它有什么问题呢?
让我们尝试移动到BigDecimal
s:
System.out.println(new BigDecimal(2.32));
2.319999999999999840127884453977458178997039794921875
您在此处看到的实际上是2.32
. 只是在大多数情况下print
,或toString()
,或您的语言用于将浮点数转换为字符串的任何内容,都会对数字进行四舍五入。
由于浮点数实际上是二进制表示的实数,而不是十进制数,因此值不准确——这反过来又使这些二进制数重复或重复出现。你可以猜到,在有限的空间里重复真实的东西永远不会是准确的。
实际上,当我说上面可怕的小数是什么意思时,我是在撒谎2.32
——正确的措辞应该是,“它是 Java 可以得到的最接近的小数,以近似于”的实际值2.32
。
在这里阅读更多:http: //floating-point-gui.de/