前几天说的要补充关于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博客),当然也不是很全,更多的资料可以再进一步探索了。

今天是圣诞节,祝大家圣诞快乐!

Logo

一站式 AI 云服务平台

更多推荐