首先如果要进行计算相关的操作的话大多数人都会第一时间想到使用double或float作为计算的变量类型,然而这是禁忌因为使用这两种进行加减乘除会丢失数据的精度,如果你是从事金融相关的行业的话那么请你一定要记住不管是任何数据的计算都要使用BigDecimal作为变量类型因为这样不会丢失数据精度,那我们现在开始操作吧。
//初始化数据
double a=0.01;
double b=0.03;
double c;
c=a+b;
System.out.println("double直接计算:"+c);
BigDecimal biga = new BigDecimal(Double.toString(a));
BigDecimal bigb = new BigDecimal(Double.toString(b));
//无丢失精度计算相加biga+bigb,获取数据为double类型
System.out.println("无丢失精度相加计算:"+biga.add(bigb).doublevalue());
//无丢失精度计算相减biga+bigb,获取数据为double类型
System.out.println("无丢失精度相减计算:"+biga.subtract(bigb).doublevalue());
//无丢失精度计算相除biga除bigb,获取数据为double类型
System.out.println("不使用无丢失精度数据直接相除计算:"+a/b);
//第一个是相除的变量,第二个是小数点后面可以有几位的限制,第三个是到尾是向上取整或四舍五入等,获取数据为string类型
System.out.println("无丢失精度相除计算:"+biga.divide(bigb,100,bigb.ROUND_HALF_DOWN).toString());
//无丢失精度计算相乘biga乘bigb
System.out.println("无丢失精度相乘计算:"+biga.multiply(bigb).toString());
double res=biga.add(bigb).doublevalue();
//计算结果为double类型
System.out.println("相加计算类型为double类型:"+res);
值得注意的是相乘和相除,首先是相乘两个特殊的数据相乘会造成数据后面会出现字母E我查越过字母E是代表10的正或负次方把它的输出类型改为toString就可以看见所有的数据
另外一个是相除,如果和前面加减的操作一样也是没问题的但是这不严谨,因为相除数据是有无限循环或无限不循环小数的和加减操作一样的话后台是会报错的,我们需要在后面加上限制小数后面几位数,第三个位置是写到最后是向上整除或向下整除还是四舍五入。
无丢失精度计算就到这里希望对你们有所帮助。



