浮点数运算不精确的问题解决和注意事项(BigDecimal)

总结:浮点数运算不精确的问题本质上是在存储的时候就不精确,这个问题会持续到即使使用到专业的工具类BigDecimal来使用时,如果仅仅只是传double类型做入参时依然会导致运算不精确,所以即使在使用BigDecimal工具类进行构造时也要使用String类型的构造函数,尽量避免使用double类型的构造函数

在使用普通的double数据类型进行存值并进行运算时,会造成数据不精确的问题,所以会用到BigDecimal,记录一下使用过程中遇到的问题解决和注意事项

首先到API手册查看BigDecimal类的介绍以及使用(构造方法)

这四个方法一眼就能看出来用法

使用double类型为入参的

  • BigDecimal(double val)

构造方法,在idea中测试

 即new一个BigDecimal,传入一个double类型入参即可,下面来做加减乘除运算

加减乘除四个方法都是以一个BigDecimal调方法并传另一个BigDecimal即可返回结果,加减乘除四个方法分别是

add(BigDecimal augend)

subtract (BigDecimal augend)

multiply(BigDecimal augend)

divide(BigDecimal augend)

 下面加减乘法运算居然更不精确了,并且除法运算偶尔还报错了,因为在实例化BigDecimal工具类时,仅仅只是传double类型做入参时依然会导致运算不精确,所以即使在使用BigDecimal工具类进行构造时也要使用String类型的构造函数,尽量避免使用double类型的构造函数。

这里在double数获取到之后 在后面拼接一个空字符串再测试:

可以看到加减乘法都可以正常运算了,但除法还是报错,这里来看一下报错信息

非终止十进制展开;没有精确可表示的十进制结果。

ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result 

 算数异常                :非终止十进制展开                          ;没有精确可表示的十进制结果。

很明显出现了除不尽的问题,这里需要使用divide方法的重载方法,有三个参数,第一个是被除数,二参为保留小数位数,三餐为舍入方式,(ROUND_HALF_UP表示四舍五入方法)

---2022.12.17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值