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的舍入模式的主要内容,如果未能解决你的问题,请参考以下文章

BigDecimal舍入模式使用及建议

BigDecimal的精度舍入模式详解

BigDecimal.divide方法

BigDecimal_对象的创建特殊的0110比较方法舍入策略

duboo类型保留2位小数

java BigDecimal八种舍入模式