如何通过BigDecimal在Java中精确执行商业计算操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2254个文字,预计阅读时间需要10分钟。
前言:今天群里一个初级开发者询问为什么测试人员测试出他写的价格计算模块有计算偏差的问题,他检查了半天也没找出问题。
这里小哥哥要提醒你,商业计算请求务必使用BigDecimal,浮点数做计算。
前言
今天群里一个初级开发者问为什么测试人员测出来他写的价格计算模块有计算偏差的问题,他检查了半天也没找出问题。这里小胖哥要提醒你,商业计算请务必使用BigDecimal,浮点做商业运算是不精确的。因为计算机无法使用二进制小数来精确描述我们程序中的十进制小数。《Effective Java》在第48条也推荐“使用BigDecimal来做精确运算”。今天我们就来总结归纳其相关的知识点。
BigDecimal
BigDecimal表示不可变的任意精度带符号十进制数。它由两部分组成:
- intVal - 未校正精度的整数,类型为BigInteger
- Scale - 一个32位整数,表示小数点右边的位数
例如,BigDecimal 3.14的未校正值为314,缩放为2。我们使用BigDecimal进行高精度算术运算。我们还将它用于需要控制比例和舍入行为的计算。如果你的计算是商业计算请务必使用计算精确的BigDecimal 。
本文共计2254个文字,预计阅读时间需要10分钟。
前言:今天群里一个初级开发者询问为什么测试人员测试出他写的价格计算模块有计算偏差的问题,他检查了半天也没找出问题。
这里小哥哥要提醒你,商业计算请求务必使用BigDecimal,浮点数做计算。
前言
今天群里一个初级开发者问为什么测试人员测出来他写的价格计算模块有计算偏差的问题,他检查了半天也没找出问题。这里小胖哥要提醒你,商业计算请务必使用BigDecimal,浮点做商业运算是不精确的。因为计算机无法使用二进制小数来精确描述我们程序中的十进制小数。《Effective Java》在第48条也推荐“使用BigDecimal来做精确运算”。今天我们就来总结归纳其相关的知识点。
BigDecimal
BigDecimal表示不可变的任意精度带符号十进制数。它由两部分组成:
- intVal - 未校正精度的整数,类型为BigInteger
- Scale - 一个32位整数,表示小数点右边的位数
例如,BigDecimal 3.14的未校正值为314,缩放为2。我们使用BigDecimal进行高精度算术运算。我们还将它用于需要控制比例和舍入行为的计算。如果你的计算是商业计算请务必使用计算精确的BigDecimal 。

