RoundingMode——Java中小数的舍位

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/recordGrowth/article/details/82799214

RoundingModeJava 中是一个枚举类,用来指定小数的舍位方式,共有8种

对于这些舍位方式,之前用过却理解地很模糊

最近一研究,又顿悟了!

那一瞬间,我知道该把这些理解封印在这篇博客里了

先来看一下常用的两种舍位写法,直接上代码

两种舍位写法

DecimalFormat

DecimalFormat myformat = new DecimalFormat();
myformat.setMaximumFractionDigits(2);				//允许的最大小数位数,末尾的0不会显示
myformat.setGroupingSize(0);						//整数部分分隔符之间的数字个数,如“123,456.78”的 groupingSize 为 3
myformat.setRoundingMode(RoundingMode.DOWN);		//舍位模式
myformat.format(1.534);

BigDecimal

new BigDecimal("1.534")
                .setScale(2, RoundingMode.DOWN)		//小数位数(末尾的0会显示)、舍位模式
                .stripTrailingZeros()				//去除末尾的0
                .toString();

八种舍位模式

看完了常用写法,让我们一起来认识这8种舍位模式

每种舍位介绍中带有例子,代码不上了,将直接展示结果

例子中的小数都保留到小数点后两位

UP

正数向上舍位,负数向下舍位

例子

1.530 --> 1.53
1.534 --> 1.54
1.538 --> 1.54
-1.534 --> -1.54

DOWN

舍位时向 0 靠近,即直接舍掉小数点后3位至末尾的数字

扫描二维码关注公众号,回复: 3281231 查看本文章

例子

1.530 --> 1.53
1.534 --> 1.53
1.538 --> 1.53
-1.534 --> -1.53

CEILING(天花板)

正数如 UP,负数如 DOWN

例子

1.530 --> 1.53
1.534 --> 1.54
1.538 --> 1.54
-1.538 --> -1.53

FLOOR(地板)

正数如 DOWN,负数如 UP

例子

1.530 --> 1.53
1.534 --> 1.53
1.538 --> 1.53
-1.538 --> -1.54

上面介绍的4种舍位模式比较粗暴,用“一刀切”的方式将数字 1-9 UP 或者 DOWN(为什么脑海中浮现出了深蹲的画面。。)

接下来要介绍的3种 HALF 舍位模式,就比较“人性化”了,类似于我们接触过的“四舍五入”舍位模式

而这个 HALF 可以简单地理解为数字 5,三种 HALF 方式的不同点也就在数字 5 的舍位模式

HALF_UP

5 UP,其他数字四舍五入,即常见的四舍五入

例子

1.530 --> 1.53
1.534 --> 1.53
1.535 --> 1.54
1.538 --> 1.54
-1.534 --> -1.53
-1.535 --> -1.54

这种模式逢5就入,使结果偏向大数

HALF_DOWN

5 DOWN,其他数字四舍五入,即五舍六入

例子

1.534 --> 1.53
1.535 --> 1.53
1.538 --> 1.54
-1.534 --> -1.53
-1.535 --> -1.53
-1.538 --> -1.54

HALF_EVEN

even 有偶数的意思

5 后面有数字且这些数字不全是0,进1
否则再看 5 的前一位,奇进偶不进
其他数字四舍五入
也叫四舍六入五成双

例子

9.8249 --> 9.82
9.82671 --> 9.83
9.8350 --> 9.84		//3为奇数进1
9.8351  --> 9.84	//5后有不为0的数字进1
9.8250 --> 9.82		//5后数字为0且2为偶数,不进
9.82501 --> 9.83	//5后有不为0的数字进1
1.524 --> 1.52
1.525 --> 1.52	//因为2是偶数,所以不进位
1.526 --> 1.53
1.195 --> 1.2	//因为9是奇数,所以进1

这种模式使结果有的变小,有的变大,从统计学上来说更加科学

UNNECESSARY

不需要指定舍位模式
这种情况是指定位数后没有数字或数字全是0
否则抛出异常

例子

1.53 --> 1.53
1.530 --> 1.53
1.53000 --> 1.53
1.531 --> ArithmeticException
1.5324 --> ArithmeticException

猜你喜欢

转载自blog.csdn.net/recordGrowth/article/details/82799214