我應該只使用舍入嗎?
NOPE,你遇到的是失去double
總和的精度。
你是第一個(value1 + value2
)suming雙打和雙總和(已失去精度)轉換爲BigDecimal
後。
爲了避免這種使用這個代替:
double value1 = 2789.45;
double value2 = 557.89;
System.out.println(BigDecimal.valueOf(value1).add(BigDecimal.valueOf(value2)));
OUTPUT:
3347.34
工作IDEONE DEMO here
UPDATE
-1。代替使用仍然脆弱的BigDecimal.valueOf
,您應該從頭開始使用BigDecimal
,並使用new BigDecimal("2789.45")
,new BigDecimal("557.89")
來創建它們。只要您使用了double
文字,就會引入不精確。 BigDecimal.valueOf
試圖讓它回來,但它並不總是工作。 - Louis Wasserman
其實我並不完全同意這一點。你不能硬編碼值創造新的小數,有什麼我可以同意被讀取值(如果可能的OP)在String
直接避免double
精度丟失:
String value1 = "2789.45";
BigDecimal one = new BigDecimal(value1);
String value2 = "557.89";
BigDecimal two = new BigDecimal(value2);
System.out.println(one.add(two));
OUTPUT:
3347.34
這將避免Louis Wasserman
注意到的問題。
新的工作演示
呵呵你打我吧:) – Mena
一個榮譽擊敗你@Mena :)謝謝 –
謝謝,作品完美 –