- 所有已实现的接口:
-
Serializable
,Comparable<RoundingMode>
,Constable
指定了数值运算的舍入策略,能够舍弃精度。每个舍入模式指示如何计算舍入结果的最低有效数字。如果返回的数字比表示精确数值所需的数字少,那么被舍弃的数字将被称为被舍弃的分数,无论这些数字对数值的贡献如何。换句话说,作为数值值,被舍弃的分数的绝对值可能大于一。
更一般地,舍入策略定义了从实数到可表示值子集的映射。对于BigDecimal
来说,可表示的值是与计算中使用的精度有关的函数。假设数学结果在BigDecimal
的指数范围内,数学结果将在结果精度中精确表示,或者将落在两个相邻可表示值之间。对于落在两个可表示值之间的实数,舍入策略确定这两个边界值中的哪一个是结果。对于范围内的实数,对于给定的可表示值集合,舍入策略将实数线的连续段映射到单个可表示值,其中与可表示值相等的实数被映射到该值。
每个舍入模式描述都包括一个表,列出了不同的两位十进制值在所讨论的舍入模式下如何舍入为一位十进制值。表中的结果列可以通过创建具有指定值的BigDecimal
数字,使用正确设置的MathContext
对象(precision
设置为1
,roundingMode
设置为所讨论的舍入模式),并在这个数字上调用具有正确MathContext
的round
来获得。下面是显示所有舍入模式的这些舍入操作结果的摘要表。
输入数字 | 将输入舍入为给定舍入模式下的一位数字的结果 | |||||||
---|---|---|---|---|---|---|---|---|
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 |
这个enum
旨在取代BigDecimal
中基于整数的舍入模式常量(BigDecimal.ROUND_UP
,BigDecimal.ROUND_DOWN
等)。
- API 注意:
- 此类中声明的五个舍入模式对应于IEEE浮点算术标准中定义的舍入方向属性。如果存在,这种对应关系将在特定常量的文档中注明。
- 参见Java语言规范:
-
15.4 浮点表达式
- 自版本:
- 1.5
- 另请参阅:
-
Nested Class Summary
Nested classes/interfaces declared in class java.lang.Enum
Enum.EnumDesc<E extends Enum<E>>
-
Enum Constant Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic RoundingMode
valueOf
(int rm) 返回与BigDecimal
中的传统整数舍入模式常量对应的RoundingMode
对象。static RoundingMode
返回具有指定名称的此类的枚举常量。static RoundingMode[]
values()
返回包含此枚举类的常量的数组,按照它们声明的顺序。
-
Enum Constant Details
-
UP
远离零舍入的舍入模式。始终增加非零被舍弃分数之前的数字。请注意,此舍入模式永远不会减少计算值的幅度。示例:
舍入模式UP示例 输入数字 使用 UP
舍入舍入为一位数字5.5 6 2.5 3 1.6 2 1.1 2 1.0 1 -1.0 -1 -1.1 -2 -1.6 -2 -2.5 -3 -5.5 -6 -
DOWN
向零舍入的舍入模式。永远不会增加被舍弃分数之前的数字(即截断)。请注意,此舍入模式永远不会增加计算值的幅度。- API 注意:
-
此舍入模式类似于用于
float
和double
运算符余数和转换为整数值的舍入策略(JLS 15.4)。此模式对应于IEEE 754舍入方向属性roundTowardZero。示例:
舍入模式DOWN示例 输入数字 使用 DOWN
舍入舍入为一位数字5.5 5 2.5 2 1.6 1 1.1 1 1.0 1 -1.0 -1 -1.1 -1 -1.6 -1 -2.5 -2 -5.5 -5
-
CEILING
向正无穷方向舍入的舍入模式。如果结果为正,则行为类似于RoundingMode.UP
;如果为负,则行为类似于RoundingMode.DOWN
。请注意,此舍入模式永远不会减少计算出的值。此模式对应于IEEE 754舍入方向属性roundTowardPositive。示例:
向正无穷舍入模式示例 输入数字 使用 CEILING
舍入后的一位数字5.5 6 2.5 3 1.6 2 1.1 2 1.0 1 -1.0 -1 -1.1 -1 -1.6 -1 -2.5 -2 -5.5 -5 -
FLOOR
向负无穷方向舍入的舍入模式。如果结果为正,则行为类似于RoundingMode.DOWN
;如果为负,则行为类似于RoundingMode.UP
。请注意,此舍入模式永远不会增加计算出的值。此模式对应于IEEE 754舍入方向属性roundTowardNegative。示例:
向负无穷舍入模式示例 输入数字 使用 FLOOR
舍入后的一位数字5.5 5 2.5 2 1.6 1 1.1 1 1.0 1 -1.0 -1 -1.1 -2 -1.6 -2 -2.5 -3 -5.5 -6 -
HALF_UP
向“最接近邻居”方向舍入的舍入模式,除非两个邻居等距,此时向上舍入。如果被舍弃的小数部分≥ 0.5,则行为类似于RoundingMode.UP
;否则,行为类似于RoundingMode.DOWN
。请注意,这是学校通常教授的舍入模式。此模式对应于IEEE 754舍入方向属性roundTiesToAway。示例:
向最接近邻居舍入模式示例 输入数字 使用 HALF_UP
舍入后的一位数字5.5 6 2.5 3 1.6 2 1.1 1 1.0 1 -1.0 -1 -1.1 -1 -1.6 -2 -2.5 -3 -5.5 -6 -
HALF_DOWN
向“最接近邻居”方向舍入的舍入模式,除非两个邻居等距,此时向下舍入。如果被舍弃的小数部分> 0.5,则行为类似于RoundingMode.UP
;否则,行为类似于RoundingMode.DOWN
。示例:
向最接近邻居舍入模式示例 输入数字 使用 HALF_DOWN
舍入后的一位数字5.5 5 2.5 2 1.6 2 1.1 1 1.0 1 -1.0 -1 -1.1 -1 -1.6 -2 -2.5 -2 -5.5 -5 -
HALF_EVEN
向“最接近邻居”方向舍入的舍入模式,除非两个邻居等距,此时向偶数邻居舍入。如果被舍弃的小数部分左侧的数字为奇数,则行为类似于RoundingMode.HALF_UP
;如果为偶数,则行为类似于RoundingMode.HALF_DOWN
。- API注释:
-
当在一系列计算中重复应用时,这是在统计上最小化累积误差的舍入模式。有时被称为“银行家舍入”,主要用于美国。此舍入模式类似于Java中大多数
float
和double
算术运算符使用的舍入策略(JLS 15.4)。此模式对应于IEEE 754舍入方向属性roundTiesToEven。示例:
向最接近偶数舍入模式示例 输入数字 使用 HALF_EVEN
舍入后的一位数字5.5 6 2.5 2 1.6 2 1.1 1 1.0 1 -1.0 -1 -1.1 -1 -1.6 -2 -2.5 -2 -5.5 -6
-
UNNECESSARY
断言请求的操作具有精确结果,因此不需要舍入的舍入模式。如果在产生不精确结果的操作上指定此舍入模式,则会抛出ArithmeticException
。示例:
无需舍入模式示例 输入数字 使用 UNNECESSARY
舍入后的一位数字5.5 抛出 ArithmeticException
2.5 抛出 ArithmeticException
1.6 抛出 ArithmeticException
1.1 抛出 ArithmeticException
1.0 1 -1.0 -1 -1.1 抛出 ArithmeticException
-1.6 抛出 ArithmeticException
-2.5 抛出 ArithmeticException
-5.5 抛出 ArithmeticException
-
-
Method Details
-
values
返回包含此枚举类常量的数组,按照它们声明的顺序排列。- 返回:
- 包含此枚举类常量的数组,按照它们声明的顺序排列
-
valueOf
返回具有指定名称的此类的枚举常量。字符串必须与此类中用于声明枚举常量的标识符完全匹配。(不允许存在多余的空格字符。)- 参数:
-
name
- 要返回的枚举常量的名称 - 返回:
- 具有指定名称的枚举常量
- 抛出:
-
IllegalArgumentException
- 如果此枚举类没有具有指定名称的常量 -
NullPointerException
- 如果参数为null
-
valueOf
返回与BigDecimal
中的传统整数舍入模式常量对应的RoundingMode
对象。- 参数:
-
rm
- 要转换的传统整数舍入模式 - 返回:
-
对应于给定整数的
RoundingMode
- 抛出:
-
IllegalArgumentException
- 整数超出范围
-