4

我的輸出是這樣的 -紅寶石 - 乘法問題

ruby-1.9.2-p290 :011 > 2.32 * 3 
=> 6.959999999999999 

我記得某個時候回到另一臺機器上我已經得到它像.. 2.32 * 3 = 6

什麼是我的錯? 非常感謝您閱讀本文。 :)

+0

上一個必須被截斷爲整數。 – tvanfosson

+0

不客氣。 '2.32.to_i * 3 => 6' – maletor

回答

7

如果你真的想向下舍爲整數,然後只

(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。

+0

非常感謝!這將打印真實的東西。但我真正的問題是不同的,雖然...我想將浮點數精確到兩位數並將其存儲在數據庫中。但是它()不適用於2.33333333。 – Anuprit

+0

它以什麼方式不起作用? '2.333333333333.round(2)''=> 2.33' –

+0

我弄明白了。經過四捨五入後,我減去0.01,這再次給我浮動不準確的數字爲2.3200000000000004。所以現在我在減法後再次四捨五入。 – Anuprit

4

我不能告訴你關於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意思。這只是在大多數情況下,printtoString(),或者任何您的語言用於將浮點數轉換爲字符串的值,這些數字會稍微增加一點。

不精確值,由於這一事實,即浮事實上二進制表示的實數,而不是那些十進制 - 這,反過來,使這些二進制重複,或復發。而且,正如你所猜測的,在有限的空間中重複真實並不是確切的。正確的措辭是,「這是最接近的小數的Java可以得到近似的2.32實際值」 -

其實,當我說的嚇人小數上面是什麼意思2.32我在撒謊。

更多在這裏閱讀:http://floating-point-gui.de/

+0

哦!我明白了。我一直忘記基礎知識!我明白你說什麼時,數字轉換爲字符串的問題是可見的。但我想我也可以在數據庫中看到相同的值。讓我驗證一下。謝謝。 – Anuprit