天天看点

解决丢失精度问题------------在购物车模块中经常遇到的问题

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);//四舍五入,保留两位小数
    //除不尽的情况
}
           

}

继续阅读