BigDecimal的使用与常见问题分析

本文介绍了BigDecimal在Java中的使用,包括初始化、加减乘除操作。讨论了BigDecimal在输出解析、多个实例运算时的常见问题,如精度丢失和数据截断异常,并详细解释了BigDecimal的八种舍入模式,帮助理解其在实际项目中的应用。
摘要由CSDN通过智能技术生成

前言:

前段时间做项目的时候,用到了BigDecimal 的这种类型 的数据,用之前感觉没什么问题,但实际开发的过程中发现了许多的问题。

本博客学习借鉴于:https://blog.csdn.net/haiyinshushe/article/details/82721234

BigDecimal的运算——加减乘除
首先是bigdecimal的初始化

这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示

BigDecimal num1 = new BigDecimal(0.005);
BigDecimal num2 = new BigDecimal(1000000);
BigDecimal num3 = new BigDecimal(-1000000);
//尽量用字符串的形式初始化
BigDecimal num12 = new BigDecimal("0.005");
BigDecimal num22 = new BigDecimal("1000000");
BigDecimal num32 = new BigDecimal("-1000000");

我们对其进行加减乘除绝对值的运算

其实就是Bigdecimal的类的一些调用
加法 add()函数    减法subtract()函数      乘法multiply()函数    除法divide()函数    绝对值abs()函数

//加法
BigDecimal result1 = num1.add(num2);
BigDecimal result12 = num12.add(num22);
 
//减法
BigDecimal result2 = num1.subtract(num2);
BigDecimal result22 = num12.subtract(num22);
 
//乘法
BigDecimal result3 = num1.multiply(num2);
BigDecimal result32 = num12.multiply(num22);
 
//绝对值
BigDecimal result4 = num3.abs();
BigDecimal result42 = num32.abs();
 
//除法
BigDecimal result5 = num2.divide(num1,20,BigDecimal.ROUND_HALF_UP);
BigDecimal result52 = num22.divide(num12,20,BigDecimal.ROUND_HALF_UP);

 

常见问题

1.bigDecimal 的输出解析

1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。

2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!

因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值