文章目录
BigDecimal
解决小数运算失真问题
解决方法:转换为BigDecimal对象
代码
package com.zhang.math;
import java.math.BigDecimal;
/**
* @Author: ggdpzhk
* @CreateTime: 2024-08-25
*/
public class BigDecimalTest {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
System.out.println(a + b);
System.out.println("------------------------------");
//1. 把小数转换为字符串 在把字符串包装为BigDecimal对象然后进行加减乘除的运算
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1 = BigDecimal.valueOf(b);
System.out.println(a1.add(b1));
System.out.println(a1.subtract(b1));
System.out.println(a1.multiply(b1));
System.out.println(a1.divide(b1));
//会遇到除法除不尽的情况
double m = 0.3;
double n = 0.1;
//BigDecimal m1 = new BigDecimal(m);// 禁止使用构造方法BigDecimal(double)的方法把double类型转换成BigDecimal对象,存在精度损失风险。比如支付时钱财问题,在精确计算或值比较的场景中可能会导致业务逻辑异常
//BigDecimal m1 = BigDecimal.valueOf(m);
BigDecimal n1 = BigDecimal.valueOf(n);
BigDecimal rs = n1.divide(m1,3,BigDecimal.ROUND_HALF_UP);//四舍五入
//更多人 更基础的运算还是转换成double类型,所以我们运算完以后转换为double类型然后输出
double rs1 = rs.doubleValue();
System.out.println(rs1);
}
}