我有點困惑,因爲我一直失去精度。雙精度丟失
也許我操作的類型不對。我有一個像「100.00」的字符串。但是當我做
Double.parseDouble(「100.00」)它被切斷爲100.需要幫助。提前致謝。
我有點困惑,因爲我一直失去精度。雙精度丟失
也許我操作的類型不對。我有一個像「100.00」的字符串。但是當我做
Double.parseDouble(「100.00」)它被切斷爲100.需要幫助。提前致謝。
您可能已打印您的電話號碼System.out.println(d)
。它將在內部呼叫Double.toString(double)
,其規格狀態爲
必須爲m或a的小數部分打印多少位數?必須至少有一位數字來表示小數部分,並且除此之外還需要多少位數,但只需要多少位數來唯一地區分參數值和類型爲double的相鄰值。
這是因爲double
數字沒有「小數精度」的概念。它是一個二進制數字與固定二進制精度(二進制點後的二進制數字的數量)。
只需使用BigDecimal的,而不是雙這樣的:不是在所有
BigDecimal houndred = new BigDecimal("100.00").setScale(2, BigDecimal.ROUND_HALF_UP);
的BigDecimal不鬆動的精度。另外,您可以根據自己的喜好設置比例,精度和舍入模式。
這不會損失精度。這只是格式不同。 – Kayaman
它可能沒有被切斷,但在打印時被忽略,因爲它不會添加信息。除此之外,正如Kayaman已經指出的那樣,這不是精確度的損失。精確度的損失可能類似於161.0 * 0.7 = 112.69999,而不是112.7。 – Thomas
在二進制文件中,你認爲'100'和'100.00'之間的區別是什麼? –