RoundingMode——Java中小数的舍位

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位至末尾的数字

例子

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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值