BigDecimal的舍入模式
Posted bd-luming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BigDecimal的舍入模式相关的知识,希望对你有一定的参考价值。
为可能丢弃精度的数值操作指定一种舍入行为。每种舍入模式都指示如何计算返回舍入结果位数的最低有效位。如果返回的位数比表示精确数值结果所需的位数少,则舍弃的位数称为舍弃部分,而不管这些位数对数值的作用如何。换句话说,假设是一个数值,舍弃部分的绝对值可能大于 1。
BigDecimal |
RoundingMode |
值 |
说明 |
ROUND_CEILING |
CEILING |
2 |
向正无限大方向舍入的舍入模式。如果结果为正,则舍入行为类似于 RoundingMode.UP;如果结果为负,则舍入行为类似于 RoundingMode.DOWN。注意,此舍入模式始终不会减少计算值。 |
ROUND_DOWN |
DOWN |
1 |
向零方向舍入的舍入模式。从不对舍弃部分前面的数字加 1(即截尾)。注意,此舍入模式始终不会增加计算值的绝对值。 |
ROUND_FLOOR |
FLOOR |
3 |
向负无限大方向舍入的舍入模式。如果结果为正,则舍入行为类似于 RoundingMode.DOWN;如果结果为负,则舍入行为类似于 RoundingMode.UP。注意,此舍入模式始终不会增加计算值。 |
ROUND_HALF_DOWN |
HALF_DOWN |
5 |
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。如果被舍弃部分 > 0.5,则舍入行为同 RoundingMode.UP;否则舍入行为同 RoundingMode.DOWN。 |
ROUND_HALF_EVEN |
HALF_EVEN |
6 |
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为同 RoundingMode.HALF_UP;如果为偶数,则舍入行为同 RoundingMode.HALF_DOWN。注意,在重复进行一系列计算时,此舍入模式可以在统计上将累加错误减到最小。此舍入模式也称为“银行家舍入法”,主要在美国使用。此舍入模式类似于 Java 中对 float 和 double 算法使用的舍入策略。 |
ROUND_HALF_UP |
HALF_UP |
4 |
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。如果被舍弃部分 >= 0.5,则舍入行为同 RoundingMode.UP;否则舍入行为同 RoundingMode.DOWN。注意,此舍入模式就是通常学校里讲的四舍五入。 |
ROUND_UNNECESSARY |
UNNECESSARY |
7 |
用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。如果对生成精确结果的操作指定此舍入模式,则抛出 ArithmeticException。 |
ROUND_UP |
UP |
0 |
远离零方向舍入的舍入模式。始终对非零舍弃部分前面的数字加 1。注意,此舍入模式始终不会减少计算值的绝对值。 |
不同舍入模式下的舍入操作汇总
根据给定的舍入模式将输入数字舍入为一位数的结果 |
||||||||
输入 数字 |
UP |
DOWN |
CEILING |
FLOOR |
HALF_UP |
HALF_DOWN |
HALF_EVEN |
UNNECESSARY |
5.5 |
6 |
5 |
6 |
5 |
6 |
5 |
6 |
抛出 ArithmeticException |
2.5 |
3 |
2 |
3 |
2 |
3 |
2 |
2 |
抛出 ArithmeticException |
1.6 |
2 |
1 |
2 |
1 |
2 |
2 |
2 |
抛出 ArithmeticException |
1.1 |
2 |
1 |
2 |
1 |
1 |
1 |
1 |
抛出 ArithmeticException |
1.0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
-1.0 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1.1 |
-2 |
-1 |
-1 |
-2 |
-1 |
-1 |
-1 |
抛出 ArithmeticException |
-1.6 |
-2 |
-1 |
-1 |
-2 |
-2 |
-2 |
-2 |
抛出 ArithmeticException |
-2.5 |
-3 |
-2 |
-2 |
-3 |
-3 |
-2 |
-2 |
抛出 ArithmeticException |
-5.5 |
-6 |
-5 |
-5 |
-6 |
-6 |
-5 |
-6 |
抛出 ArithmeticException |
以上是关于BigDecimal的舍入模式的主要内容,如果未能解决你的问题,请参考以下文章