天天看點

解決丢失精度問題------------在購物車子產品中經常遇到的問題

1.在電商項目中進行運算的時候,會出現一些丢失精度的問題,這是不允許的,一下是測試精度的一個小方法:

解決丢失精度問題------------在購物車子產品中經常遇到的問題

在控制台上輸出的資料,精度有問題;

2.在effective java這本書中提到,float、double這些精度的計算隻能用在科研領域中一些細小精度可以忽略的方面,在商業計算中一定是用BigDecimal,

BigDecimal一共有四個構造方法,

3.資料庫中存儲的是double、float經常進行轉換的話會比較麻煩,是以寫一個工具類這樣友善:

package com.mmall.util;

import java.math.BigDecimal;

public class BigDecimalUtil {

private BigDecimalUtil(){

}

public static BigDecimal add(double v1,double v2){
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.add(b2);
}

public static BigDecimal sub(double v1,double v2){
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.subtract(b2);
}

public static BigDecimal mul(double v1,double v2){
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.multiply(b2);
}

public static BigDecimal div(double v1,double v2){
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);//四舍五入,保留兩位小數
    //除不盡的情況
}
           

}

繼續閱讀