關於double 相加時出現的多位
阿新 • • 發佈:2019-01-05
String test = "40.61 , 18588.73, 29925.07, 7986.06, 18639.19, 25914.32, 32907.74, 34165.89, 9724.7, 52777.92";
String[] arr = test.split(",");
double sum = 0;
for(int i=0;i<arr.length;i++){
sum += Double.parseDouble(arr[i]);
}
String[] arr = test.split(",");
double sum = 0;
for(int i=0;i<arr.length;i++){
sum += Double.parseDouble(arr[i]);
}
System.out.println(sum);
結果: 230670.22999999998
查了查 沒有深入的瞭解,大概是java 的double機制,關於精度的問題,若是不出現這種情況,保留小數點後兩位就可以了。或者使用BigDecimal進行計算,另外《effective java》這本書裡也提過,double和float 不建議使用商業計算。
補充:原因在於我們的計算機是二進位制的。浮點數沒有辦法是用二進位制進行精確表示。我們的CPU表示浮點數由兩個部分組成:指數和尾數,這樣的表示方法一般都會失去一定的精確度,有些浮點數運算也會產生一定的誤差。如:2.4的二進位制表示並非就是精確的2.4。反而最為接近的二進位制表示是 2.3999999999999999。浮點數的值實際上是由一個特定的數學公式計算得到的。