- BigDecimal.ROUND_UP
翻译:舍入模式从零舍入。始终在丢弃非零小数之前递增数字。请注意,此舍入模式永远不会减小计算值的大小。
不论正负,保留精度之前的数字加一
0.123456789 保留四位小数结果为:0.1235
-0.123456789 保留四位小数结果为:-0.1235
- BigDecimal.ROUND_DOWN
翻译:舍入模式向零舍入。切勿在舍弃小数(即截断)之前增加数字。请注意,这种舍入模式永远不会增加计算值的大小。
不论正负,保留精度之后的数字直接截掉(丢弃)
0.123456789 保留四位小数结果为:0.1234
-0.123456789 保留四位小数结果为:-0.1234
- BigDecimal.ROUND_CEILING
翻译:舍入模式向正无穷大方向舍入。如果BigDecimal为正,则行为与ROUND_UP相同;如果为负,则表现为ROUND_DOWN。请注意,此舍入模式永远不会减少计算值。
正:ROUND_UP
负:ROUND_DOWN
0.123456789 保留四位小数结果为:0.1235
-0.123456789 保留四位小数结果为:-0.1234
- BigDecimal.ROUND_FLOOR
翻译:舍入模式向负无穷大舍入。如果BigDecimal为正,则行为与ROUND_DOWN相同;如果为负,则表现与ROUND_UP相同。请注意,此舍入模式永远不会增加计算值。
行为和BigDecimal.ROUND_CEILING相反
正:ROUND_DOWN
负:ROUND_UP
0.123456789 保留四位小数结果为:0.1234
-0.123456789 保留四位小数结果为:-0.1235
- BigDecimal.ROUND_HALF_UP
翻译:舍入模式向“最近的邻居”舍入,除非两个邻居都是等距的,在这种情况下将舍入。如果丢弃分数≥0.5,则表现为ROUND_UP;否则,行为与ROUND_DOWN相同。请注意,这是我们大多数人在小学时所教的四舍五入模式。
四舍五入,去掉正负再看
0.123456789 保留四位小数结果为:0.1235
-0.123456789 保留四位小数结果为:-0.1235
- BigDecimal.ROUND_HALF_DOWN
翻译:舍入模式向“最近的邻居”舍入,除非两个邻居都等距,在这种情况下舍入。如果丢弃的分数**>** 0.5,则行为与ROUND_UP相同;否则,行为与ROUND_DOWN相同。
0.123456789 保留四位小数结果为:0.1234
-0.123456789 保留四位小数结果为:-0.1234
- BigDecimal.ROUND_HALF_EVEN
翻译:舍入模式向“最近的邻居”舍入,除非两个邻居都等距,在这种情况下,向偶数邻居舍入。如果舍弃分数左边的数字为奇数,则表现为ROUND_HALF_UP;如果是偶数,则其行为与ROUND_HALF_DOWN相同。请注意,这是舍入模式,当在一系列计算中重复应用时,该模式可将累积误差最小化。
不论正负,精度前的一位是偶数直接截掉,是基数则加一
0.123456789 保留四位小数结果为:0.1234
-0.123456789 保留四位小数结果为:-0.1234
0.12335 保留五位小数结果为:0.1234
-0.12335 保留五位小数结果为:-0.1234
- BigDecimal.ROUND_UNNECESSARY
翻译:舍入模式可以断言所请求的操作具有准确的结果,因此不需要舍入。如果在产生不精确结果的操作上指定了这种舍入模式,则会引发ArithmeticException。
超过精度则报错
0.123456789保留4位小数则抛出异常
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46import java.math.BigDecimal; public class BigDecimalTest { public static void main(String[] args) { BigDecimal bigDecimal1 = new BigDecimal("0.12345"); BigDecimal bigDecimal2 = new BigDecimal("-0.12345"); System.out.println("******************* BigDecimal.ROUND_UP ***********************"); System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_UP)); System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_UP)); System.out.println("******************* BigDecimal.ROUND_DOWN ***********************"); System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_DOWN)); System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_DOWN)); System.out.println("******************* BigDecimal.ROUND_CEILING ***********************"); System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_CEILING)); System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_CEILING)); System.out.println("******************* BigDecimal.ROUND_FLOOR ***********************"); System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_FLOOR)); System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_FLOOR)); System.out.println("******************* BigDecimal.ROUND_HALF_UP ***********************"); System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_HALF_UP)); System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_HALF_UP)); System.out.println("******************* BigDecimal.ROUND_HALF_DOWN ***********************"); System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_HALF_DOWN)); System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_HALF_DOWN)); System.out.println("******************* BigDecimal.ROUND_HALF_EVEN ***********************"); System.out.println(bigDecimal1.setScale(4, BigDecimal.ROUND_HALF_EVEN)); System.out.println(bigDecimal2.setScale(4, BigDecimal.ROUND_HALF_EVEN)); System.out.println(new BigDecimal("0.12335").setScale(4, BigDecimal.ROUND_HALF_EVEN)); System.out.println(new BigDecimal("0.12335").setScale(4, BigDecimal.ROUND_HALF_EVEN)); System.out.println("******************* BigDecimal.ROUND_UNNECESSARY ***********************"); System.out.println(bigDecimal1.setScale(6, BigDecimal.ROUND_UNNECESSARY)); System.out.println(bigDecimal2.setScale(3, BigDecimal.ROUND_UNNECESSARY)); } }
运行结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32******************* BigDecimal.ROUND_UP *********************** 0.1235 -0.1235 ******************* BigDecimal.ROUND_DOWN *********************** 0.1234 -0.1234 ******************* BigDecimal.ROUND_CEILING *********************** 0.1235 -0.1234 ******************* BigDecimal.ROUND_FLOOR *********************** 0.1234 -0.1235 ******************* BigDecimal.ROUND_HALF_UP *********************** 0.1235 -0.1235 ******************* BigDecimal.ROUND_HALF_DOWN *********************** 0.1234 -0.1234 ******************* BigDecimal.ROUND_HALF_EVEN *********************** 0.1234 -0.1234 0.1234 0.1234 ******************* BigDecimal.ROUND_UNNECESSARY *********************** 0.123450 Exception in thread "main" java.lang.ArithmeticException: Rounding necessary at java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4179) at java.math.BigDecimal.needIncrement(BigDecimal.java:4235) at java.math.BigDecimal.divideAndRound(BigDecimal.java:4143) at java.math.BigDecimal.setScale(BigDecimal.java:2455) at com.demo.BigDecimalTest.main(BigDecimalTest.java:43)
最后
以上就是懦弱紫菜最近收集整理的关于BigDecimal里面八种舍位模式的全部内容,更多相关BigDecimal里面八种舍位模式内容请搜索靠谱客的其他文章。
发表评论 取消回复