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

文章目录

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

    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值