1. 程式人生 > >關於double 相加時出現的多位

關於double 相加時出現的多位

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]);
 }

     System.out.println(sum); 

 結果: 230670.22999999998

查了查 沒有深入的瞭解,大概是java 的double機制,關於精度的問題,若是不出現這種情況,保留小數點後兩位就可以了。或者使用BigDecimal進行計算,另外《effective java》這本書裡也提過,double和float 不建議使用商業計算。

補充:原因在於我們的計算機是二進位制的。浮點數沒有辦法是用二進位制進行精確表示。我們的CPU表示浮點數由兩個部分組:指數和尾數,這樣的表示方法一般都會失去一定的精確度,有些浮點數運算也會產生一定的誤差。如:2.4的二進位制表示並非就是精確的2.4。反而最為接近的二進位制表示是 2.3999999999999999。浮點數的值實際上是由一個特定的數學公式計算得到的。