我是靠谱客的博主 懦弱紫菜,这篇文章主要介绍BigDecimal里面八种舍位模式,现在分享给大家,希望可以做个参考。

  1. BigDecimal.ROUND_UP

翻译:舍入模式从零舍入。始终在丢弃非零小数之前递增数字。请注意,此舍入模式永远不会减小计算值的大小。

不论正负,保留精度之前的数字加一
0.123456789 保留四位小数结果为:0.1235
-0.123456789 保留四位小数结果为:-0.1235

  1. BigDecimal.ROUND_DOWN

翻译:舍入模式向零舍入。切勿在舍弃小数(即截断)之前增加数字。请注意,这种舍入模式永远不会增加计算值的大小。

不论正负,保留精度之后的数字直接截掉(丢弃)
0.123456789 保留四位小数结果为:0.1234
-0.123456789 保留四位小数结果为:-0.1234

  1. BigDecimal.ROUND_CEILING

翻译:舍入模式向正无穷大方向舍入。如果BigDecimal为正,则行为与ROUND_UP相同;如果为负,则表现为ROUND_DOWN。请注意,此舍入模式永远不会减少计算值。

正:ROUND_UP
负:ROUND_DOWN
0.123456789 保留四位小数结果为:0.1235
-0.123456789 保留四位小数结果为:-0.1234

  1. BigDecimal.ROUND_FLOOR

翻译:舍入模式向负无穷大舍入。如果BigDecimal为正,则行为与ROUND_DOWN相同;如果为负,则表现与ROUND_UP相同。请注意,此舍入模式永远不会增加计算值。

行为和BigDecimal.ROUND_CEILING相反
正:ROUND_DOWN
负:ROUND_UP
0.123456789 保留四位小数结果为:0.1234
-0.123456789 保留四位小数结果为:-0.1235

  1. BigDecimal.ROUND_HALF_UP

翻译:舍入模式向“最近的邻居”舍入,除非两个邻居都是等距的,在这种情况下将舍入。如果丢弃分数0.5,则表现为ROUND_UP;否则,行为与ROUND_DOWN相同。请注意,这是我们大多数人在小学时所教的四舍五入模式。

四舍五入,去掉正负再看
0.123456789 保留四位小数结果为:0.1235
-0.123456789 保留四位小数结果为:-0.1235

  1. BigDecimal.ROUND_HALF_DOWN

翻译:舍入模式向“最近的邻居”舍入,除非两个邻居都等距,在这种情况下舍入。如果丢弃的分数**>** 0.5,则行为与ROUND_UP相同;否则,行为与ROUND_DOWN相同。

0.123456789 保留四位小数结果为:0.1234
-0.123456789 保留四位小数结果为:-0.1234

  1. 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

  1. 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
46
import 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里面八种舍位模式内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部