1. 程式人生 > >java中關於資料精度問題

java中關於資料精度問題

java中特別在銀行內使用資料時,對資料的精度要求比較高,這個時候通常使用Bigdecimal類來提高資料的精度,但是由於在程式碼開發過程中會遇到一些開發人員將該資料進行double或者long的轉換,從來導致精度的錯誤,舉例如下:

   BigDecimal a = new BigDecimal("569.56");

double m = a.doubleValue();
    System.out.println(m);
    double m1 = a.doubleValue()*100;
    System.out.println(m1);

這時輸出的m 為569.56,m1為56955.99999999999,在銀行系統中不注意的化,在檔案處理中就會捨棄後面的小數尾數,從而導致少了一分錢。

因此在使用高精度資料的時候建議使用Bigdecimal類的原始的包含方法處理,具體整理如下:

add(BigDecimal)BigDecimal物件中的值相加,然後返回這個物件。 subtract(BigDecimal)BigDecimal物件中的值相減,然後返回這個物件。 multiply(BigDecimal)BigDecimal物件中的值相乘,然後返回這個物件。 divide(BigDecimal)BigDecimal物件中的值相除,然後返回這個物件。 toString()BigDecimal物件的數值轉換成字串。 doubleValue()BigDecimal物件中的值以雙精度數返回。 

floatValue()BigDecimal物件中的值以單精度數返回。 longValue()BigDecimal物件中的值以長整數返回。 intValue()BigDecimal物件中的值以整數返回

在牽扯到位移的時候使用movePointRight或者movePointLeft的方式