Java中double值的乘法運算符的保證精度是多少?java中雙精度乘法的精度?
例如,2.2 * 100是220.00000000000003,但是220是雙數。 220.00000000000003是後220
Java中double值的乘法運算符的保證精度是多少?java中雙精度乘法的精度?
例如,2.2 * 100是220.00000000000003,但是220是雙數。 220.00000000000003是後220
乘法工作正常,但2.2
不能完全按照雙表示。最近的雙打:
一些軟件將打印後的值作爲2.2
,但這並不意味着它是精確的。這只是意味着它被視爲「足夠接近」。
謝謝,我錯誤地認爲事實println打印2.2意味着它是確切的 –
下一個雙重如果您正在使用財務數據時不使用float or double
只需使用java.math.BigDecimal
謝謝,但這不是我問的問題 –
你問過double的倍數,試着做同樣的操作,但只是使用BigDecimal,你的問題就解決了。 –
我的問題是關於乘法運算的準確性,因爲我讀過[每個計算機科學家應該知道的關於浮點數的內容](http://download.oracle.com/docs/cd/E19957-01/806 -3568/ncg_goldberg.html)「IEEE標準要求加法,減法,乘法和除法的結果完全取整。也就是說,結果必須精確計算,然後四捨五入到最接近的浮點數(使用round到even)。「,我驚訝地收到了我沒有預料到的答案。@duskwuff在下面解釋了爲什麼會發生這種情況。 –
大巴山:這取決於你的號碼multiplicating,看到浮點數字是如何在Java中實現(在大多數語言)。 Java中的浮點數主要是IEEE-754。我建議引人入勝的閱讀:*「每個計算機科學家應該知道的浮點數字」* http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html請注意「科學家「的名字:如果你沒有進行科學的計算,如果你使用浮點數,你可能是錯誤的。 – SyntaxT3rr0r
- 關閉ulp! – Atreys