Java:BigDecimal 解决小数运算失真问题

发布于:2024-08-25 ⋅ 阅读:(142) ⋅ 点赞:(0)

文章目录

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);

    }
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到