簡體   English   中英

在java中錯誤的十進制從Double轉換為String

[英]Wrong Decimal Converting from Double to String in java

我有一個格式正確的字符串,可以轉換為double,它適用於大多數小數。 問題是對於.33,.67,以及可能還有其他我未測試過的,小數點變為.6700000000002.329999999998 我理解為什么會發生這種情況但是有人建議修復它。

這是IEEE-754舍入規則的結果,有些數字不能用二進制補碼精確表示。 例如, 1/10不能精確表示。

您可以使用BigDecimal添加更多精度(但不是無限)。

BigDecimal oneTenth = new BigDecimal("1").divide(new BigDecimal("10"));
System.out.println(oneTenth);

哪個輸出0.1

使用內部基本2機器表示無法准確表示某些十進制數字。

這對你來說是雙精度的。 二進制數和小數不能很好地協同工作。 除非你正在做一些非常精確的事情,否則應該沒問題,如果要打印它,你應該使用十進制格式或printf。

浮點數的值不是直接存儲,而是存儲指數值。 您可以將3.1233453456356寫為數字,但這會在內存中存儲類似3和2 ^ 6的內容。 它會嘗試存儲與您的數字一樣接近的值,但這些差異可能會發生。

除非你正在測試平等,否則它應該不是問題。 對於相等的浮點測試,您需要允許“delta”,以便:

if (a == b)

if (abs(a-b) < 0.000001)

或類似的小delta值。 對於打印,將其限制為兩位小數,格式化程序將為您舍入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM