BigDecimal

BigDecimal

BigDecimal 类是 Java 标准库中的一个类,用于表示任意精度的十进制数。相对于基本数据类型 floatdoubleBigDecimal 能够提供更高的精度和避免浮点数运算误差。

以下是 BigDecimal 类的一些主要特点和用法:

  1. 精度控制
    • BigDecimal 可以表示精确的十进制数,不会受到浮点数舍入误差的影响。
    • 具有可调整的精度,可以指定小数点后的位数。
  2. 构造方法
    • BigDecimal(double val):将双精度浮点数转换为 BigDecimal
    • BigDecimal(String val):将字符串转换为 BigDecimal
  3. 常量
    • BigDecimal.ZERO:表示值为零的 BigDecimal
    • BigDecimal.ONE:表示值为一的 BigDecimal
    • BigDecimal.TEN:表示值为十的 BigDecimal
  4. 基本算术操作
    • add(BigDecimal augend):加法。
    • subtract(BigDecimal subtrahend):减法。
    • multiply(BigDecimal multiplicand):乘法。
    • divide(BigDecimal divisor):除法。
    • remainder(BigDecimal divisor):返回除法的余数。
    • pow(int n):返回 BigDecimal 的 n 次幂。
  5. 比较和判断
    • compareTo(BigDecimal val):比较两个 BigDecimal 的大小。
    • equals(Object obj):判断两个 BigDecimal 是否相等。
    • signum():返回 BigDecimal 的符号函数。
  6. 取整和舍入
    • setScale(int newScale):设置小数点后的位数。
    • round(MathContext mc):使用指定的 MathContextBigDecimal 进行舍入。
  7. 其他方法
    • abs():返回 BigDecimal 的绝对值。
    • negate():返回 BigDecimal 的相反数。
    • intValue()longValue()doubleValue():将 BigDecimal 转换为对应的基本数据类型。

舍入方法

  1. ROUND_UP(向上舍入)
    • 如果数字是正数,则舍入行为同 Math.ceil
    • 如果数字是负数,则舍入行为同 Math.floor
    • 例子:1.5 舍入为 2.0-1.5 舍入为 -1.0
  2. ROUND_DOWN(向下舍入)
    • 向零的方向舍入,即截去多余的小数部分。
    • 例子:1.5 舍入为 1.0-1.5 舍入为 -1.0
  3. ROUND_CEILING(朝正无穷舍入)
    • 向正无穷方向舍入,即始终向正数方向舍入。
    • 例子:1.5 舍入为 2.0-1.5 舍入为 -1.0
  4. ROUND_FLOOR(朝负无穷舍入)
    • 向负无穷方向舍入,即始终向负数方向舍入。
    • 例子:1.5 舍入为 1.0-1.5 舍入为 -2.0
  5. ROUND_HALF_UP(四舍五入)
    • 如果数字部分大于等于 0.5,则舍入行为同 Math.round
    • 例子:1.5 舍入为 2.0-1.5 舍入为 -1.0
  6. ROUND_HALF_DOWN(五舍六入)
    • 如果数字部分大于 0.5,则舍入行为同 Math.round
    • 例子:1.5 舍入为 1.0-1.5 舍入为 -2.0
  7. ROUND_HALF_EVEN(银行家舍入法)
    • 如果数字部分大于 0.5,则舍入行为同 Math.round
    • 如果数字部分等于 0.5,则舍入到最接近的偶数。
    • 例子:1.5 舍入为 2.0-1.5 舍入为 -2.0
  8. ROUND_UNNECESSARY(不需要舍入)
    • 如果存在多余的小数部分,则抛出 ArithmeticException

在使用 BigDecimal 进行舍入时,可以通过 setScale 方法指定小数点后的位数,并通过 setRoundingMode 方法设置舍入模式。例如:

BigDecimal value = new BigDecimal("1.234567");
BigDecimal roundedValue = value.setScale(2, RoundingMode.HALF_UP);

这里,setScale(2, RoundingMode.HALF_UP) 表示将 value 舍入到小数点后两位,使用四舍五入的模式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值