Java中BigDecimal类的常见用法及针对divide()方法的多种处理模式
一般的float和double类型数据可以用作科学计算和工程计算,但是由于在商业计算中,对数据精度的要求较高,所以在开发过程中会用java.math.BigDecimal类。因为BigDecimal类支持任意精度的定点数,可以用它来精确计算货币值。
前几天说的要补充关于BigDecimal类的常见用法,今天它来了 (^_^)
一般的float和double类型数据可以用作科学计算和工程计算,但是由于在商业计算中,对数据精度的要求较高,所以在开发过程中会用java.math.BigDecimal类。因为BigDecimal类支持任意精度的定点数,可以用它来精确计算货币值。
在BigDecimal类中常见的两个构造方法如下:
1.public BigDecimal(double val): 实例化时将双精度型转化为BigDecimal类型。
2.public BigDecimal(String val): 实例化时将字符串形式转化为BigDecimal类型。
BigDecimal类型的数字,可以用作超大浮点数运算,如加、减、乘、除等。在所有运算中,除法是最复杂的,因为在除不尽的情况下,末尾小数点的处理是需要考虑的。
下面列举了BigDecimal类实现的加、减、乘、除方法:
1.public BigDecimal add(BigDecimal augend):加法
2.public BigDecimal subtract(BigDecimal subtranhend):减法
3.public BigDecimal multiply(BigDecimal multiplicend):乘法
4.public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode):除法,三个参数分别代表:除数、商的小数点后的位数、近似处理模式
以下表格列举了针对除法中的近似处理模式:
| BigDecimal类中divide()方法的多种处理模式 | |
| 模式 | 含义 |
| BigDecimal.ROUND_UP | 商的最后一位如果大于0,则向前进位,正负数都如此。如:1.1≈2 |
| BigDecimal.ROUND_DOWN | 商的最后一位,无论是什么数字,都省略。如:1.9≈1 |
| BigDecimal.ROUND_CEILING | 商如果是正数,按照ROUND_UP模式处理;如果是负数,按照ROUND_DOWN模式处理。这两种处理模式,都会使得近似值大于等于实际值。如:1.1≈2,-1.1≈-1 |
| BigDecimal.ROUND_FLOOR | 与ROUND_CEILING模式相反,商如果是正数,按照ROUND_DOWN模式处理;如果是负数,按照ROUND_UP模式处理。这两种处理模式,都会使得近似值小于等于实际值。如:1.1≈1,-1.1≈-2 |
| BigDecimal.ROUND_HALF_DOWN | 对商进行四舍五入操作,如果商最后一位小于等于5,则做舍弃操作;如果大于5,则做进位操作。如:7.5≈7,7.6≈8 |
| BigDecimal.ROUND_HALF_UP | 对商进行四舍五入操作,如果商最后一位小于5,则做舍弃操作;如果大于等于5,则做进位操作。如:7.5≈8,7.4≈7 |
| BigDecimal.ROUND_HALF_EVEN | 如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果为偶数,则按照ROUND_HALF_DOWN处理。如:7.5≈8,8.5≈8 |
| BigDecimal.ROUND_UNNECESSARY | 指定操作结果不需要做处理。如果在产生不精确结果的操作上指定了此舍入模式,则抛出ArithmeticException异常 |
以上表格内容参考源码中的Rounding Modes 部分

以上就是针对BigDecimal类的一些常用方法,如果想要学习其他数学相关的处理,可以查看我之前写的一篇文章(Java中的Math类相关方法整理_花生君的博客-CSDN博客),当然也不是很全,更多的资料可以再进一步探索了。
今天是圣诞节,祝大家圣诞快乐!
更多推荐




所有评论(0)