double check =0.615 * 255 -0.515 * 255 -0.100 * 255;
System.out.println(check);
爲什麼要得到-2.8421709430404007E-14?它應該是0.0在java中雙擊打印並得到錯誤的答案
double check =0.615 * 255 -0.515 * 255 -0.100 * 255;
System.out.println(check);
爲什麼要得到-2.8421709430404007E-14?它應該是0.0在java中雙擊打印並得到錯誤的答案
雙操作有一些精度問題。使用BigDecimal操作而不是雙倍,你會得到預期的結果。
//double check =0.615 * 255 + -0.515 * 255 + -0.100 * 255;
BigDecimal check =
(BigDecimal.valueOf(0.615).multiply(BigDecimal.valueOf(255)))
.add(BigDecimal.valueOf(-0.515).multiply(BigDecimal.valueOf(255)))
.add(BigDecimal.valueOf(-0.100).multiply(BigDecimal.valueOf(255)));
System.out.println(check);
結果爲:0.000
非常感謝你 – Rebecca
調試你的數學:
double check0 = 0.615 * 255;
System.out.println(check0);
double check1 = -0.515 * 255;
System.out.println(check1);
double check3 = -0.100 * 255;
System.out.println(check3);
System.out.println("Result: " + (check0 + check1 + check3));
輸出:
156.825
-131.32500000000002
-25.5
Result: -2.8421709430404007E-14
記住:
BigDecimal
你想控制四捨五入 當執行操作與浮點數
http://stackoverflow.com/a/177512/887149看到這個帖子 – Mohayemin
@JunedAhsan因爲當你使用的計算來計算應該是0,原因156.825- 131.325-25.5 = 0 – Rebecca