我的輸出是這樣的 -紅寶石 - 乘法問題
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