我的输出是这样的 -红宝石 - 乘法问题
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()
,或者任何您的语言用于将浮点数转换为字符串的值,这些数字会稍微增加一点。
不精确值,由于这一事实,即浮事实上二进制表示的实数,而不是那些十进制 - 这,反过来,使这些二进制重复,或复发。而且,正如你所猜测的,在有限的空间中重复真实并不是确切的。正确的措辞是,“这是最接近的小数的Java可以得到近似的2.32
实际值” -
其实,当我说的吓人小数上面是什么意思2.32
我在撒谎。
更多在这里阅读:http://floating-point-gui.de/
哦!我明白了。我一直忘记基础知识!我明白你说什么时,数字转换为字符串的问题是可见的。但我想我也可以在数据库中看到相同的值。让我验证一下。谢谢。 – Anuprit
上一个必须被截断为整数。 – tvanfosson
不客气。 '2.32.to_i * 3 => 6' – maletor