ROUND_CEILING
Rounding mode to round towards positive infinity.
向正无穷方向舍入
ROUND_DOWN
Rounding mode to round towards zero.
向零方向舍入
ROUND_FLOOR
Rounding mode to round towards negative infinity.
向负无穷方向舍入
ROUND_HALF_DOWN
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN
Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY
Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.
计算结果是精确的,不需要舍入模式
ROUND_UP
Rounding mode to round away from zero.
向远离0的方向舍入
例子
BigDecimal n3 = new BigDecimal(1.2345678901234567890E+9);
System.out.println(n3)
这样输出的结果是:1234567890.1234567165374755859375
当到了后面17位之后就开始不准确了
因Double类型本身只能精确到17位
但是如果这样
BigDecimal n4 = new BigDecimal("1.23456789012345678901234567890E+9");
结果是1234567891.12345678901234567890
这样就能绝对精确
分享到:
相关推荐
在进行数学运算时,可以通过 `setScale(int newScale, RoundingMode roundingMode)` 方法来指定结果的精度和舍入模式。常用的舍入模式包括: - `RoundingMode.UP`:远离零方向舍入。 - `RoundingMode.DOWN`:向...
除法运算需要指定精确的小数位数(scale)和舍入模式(roundingMode),避免出现不准确的结果或异常: ```java BigDecimal result5 = num2.divide(num1, 20, BigDecimal.ROUND_HALF_UP); ``` 这里 `20` 表示...
这里,`RoundingMode.HALF_UP`是常用的四舍五入舍入模式,意味着如果第三位小数大于或等于5,则向上舍入;否则,向下舍入。 `RoundingMode`枚举类提供了多种舍入策略,如: - `RoundingMode.UNNECESSARY`:要求精确...
`BigDecimal`提供了多种舍入模式来处理超出小数点后位数限制的情况,例如: - `RoundingMode.UP`:始终向上舍入。 - `RoundingMode.DOWN`:始终向下舍入。 - `RoundingMode.CEILING`:如果是正数,则向上舍入;如果...
然而,对于更复杂的舍入需求,例如控制舍入模式(比如舍入到最接近的偶数),则需要使用`BigDecimal`类和`RoundingMode`枚举。`BigDecimal`是一个任意精度的十进制数,它提供了更多的控制方式来进行精确的计算和舍入...
分割除法时需注意,由于可能会出现无限循环小数,`divide()`方法需要指定舍入模式,例如`RoundingMode.HALF_UP`表示四舍五入。 BigDecimal还提供了比较操作,如`compareTo()`方法,用于比较两个BigDecimal值的大小...
其中,`RoundingMode`枚举提供了多种舍入策略,如`ROUND_HALF_UP`(四舍五入)和`ROUND_HALF_DOWN`(逢五不进,逢五不退)等。需要注意的是,当使用`ROUND_HALF_DOWN`时,例如: ```java System.out.println(divide("67...
`BigDecimal`的除法运算可以设置不同的舍入模式,例如`RoundingMode.HALF_UP`(半上舍入)、`RoundingMode.DOWN`(向下舍入)等,这会影响除法结果的小数部分如何处理。 4. 其他方法: `BigDecimal`还提供了多种...
舍入模式决定了在计算过程中如何处理超出精度的数字,例如`RoundingMode.HALF_UP`(四舍五入)、`RoundingMode.DOWN`(向下取整)等。 4. 比较操作: `BigDecimal`提供了`compareTo()`方法用于比较两个`BigDecimal...
`setScale(int newScale, RoundingMode roundingMode)`用于调整小数位数并根据指定的舍入模式处理超出的位数。 7. **效率考虑**:`BigDecimal`运算比基本类型慢,因此应避免在性能敏感的代码中频繁使用。如果可能,...
例如,RoundingMode.HALF_UP是常用的四舍五入模式,它会将超出位数的数字向最接近的一边靠拢,如果两边等距,则向上(即“五入”)。 3. 金额从分转元: 在中国的货币系统中,1元等于100分。因此,当我们将金额从...
`BigDecimal` 提供了多种舍入模式,如: - `ROUND_UP`:始终向上舍入,即使结果小于半个单位也进位。 - `ROUND_DOWN`:始终向下舍入,即使结果大于半个单位也不进位。 - `ROUND_CEILING`:向正无穷方向舍入,对于...
注意,BigDecimal的除法默认可能会抛出ArithmeticException,所以我们需要指定舍入模式,如RoundingMode.HALF_UP,以确保在除不尽时有明确的处理方式。 4. **格式化显示**:为了保持价格始终保留小数点后十位,我们...
此外,BigDecimal类还支持舍入模式(RoundingMode),在进行除法运算时,如果需要四舍五入或者按照特定规则处理余数,可以通过setScale(int newScale, RoundingMode roundingMode)方法来实现。总之,Java中的...
4. **除法**:使用`divide()`方法进行除法,注意可能会有舍入问题,需要指定舍入模式,如`RoundingMode.HALF_UP`。 ```java bignum3 = bignum1.divide(bignum2, RoundingMode.HALF_UP); ``` 结果将是`2`。 ### ...
在实际开发中,为了使代码更具可扩展性和维护性,开发者还可以考虑将折扣规则抽象为配置文件,或者使用策略模式,将每种折扣策略封装为独立的类,这样在需求变更时,只需修改或添加策略类,而无需改动核心的折扣计算...
bigDecimal = bigDecimal.setScale(2, RoundingMode.FLOOR); Integer integer = bigDecimal.intValue(); System.out.println(integer); // 输出:1 ``` 总结这三种方法: - `intValue()` 方法简单快捷,但不...
2. **`BigDecimal`类**: `BigDecimal`是Java中用于处理精确浮点数的类,它提供了丰富的四舍五入方法,如`round(RoundingMode mode)`。`RoundingMode`枚举定义了多种舍入策略,如`UP`(向远离零的方向取整)、`DOWN`...
`BigDecimal`提供了类似`BigInteger`的运算方法,但针对浮点数,还额外支持舍入模式(ROUND_UP、ROUND_DOWN等)来控制除法和取模运算的精度: ```java BigDecimal bd1 = new BigDecimal("10.5"); BigDecimal bd2 = ...