java BigDecimal.ROUND_UP和BigDecimal.ROUND_DOWN的用处

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路java BigDecimal.ROUND_UP和BigDecimal.ROUND_DOWN的用处,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

今天在工作中遇到了这样的一个需求,

一个小数,例如1.7777777,或者1.3333333,不管后面的位数是多少,只保留到小数点后第二位,但是不是四舍五入,1.7777777处理后就是1.77,1.3333333处理后就是1.33

这个就要用到BigDecimal#setScale的方法了。

具体看如下代码:

?View Code JAVA

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
 
  1. import java.math.BigDecimal;

  2. import java.math.RoundingMode;

  3.  

  4. public class ScaleTest {

  5.  

  6. public static void main(String[] args) {

  7.  

  8. double a = 1.66728D;

  9. double b = 1.33333D;

  10. double c = 1.00000D;

  11.  

  12. BigDecimal aa = new BigDecimal(a);

  13. BigDecimal bb = new BigDecimal(b);

  14. BigDecimal cc = new BigDecimal(c);

  15. System.out.println(aa.setScale(2, BigDecimal.ROUND_UP));

  16. System.out.println(aa.setScale(2, BigDecimal.ROUND_DOWN));

  17. System.out.println(bb.setScale(2, BigDecimal.ROUND_UP));

  18. System.out.println(bb.setScale(2, BigDecimal.ROUND_DOWN));

  19. System.out.println(cc.setScale(2, BigDecimal.ROUND_UP));

  20. System.out.println(cc.setScale(2, BigDecimal.ROUND_DOWN));

  21. System.out.println("-------------------------------------");

  22. System.out.println(aa.setScale(2, RoundingMode.UP));

  23. System.out.println(aa.setScale(2, RoundingMode.DOWN));

  24. System.out.println(bb.setScale(2, RoundingMode.UP));

  25. System.out.println(bb.setScale(2, RoundingMode.DOWN));

  26. System.out.println(cc.setScale(2, RoundingMode.UP));

  27. System.out.println(cc.setScale(2, RoundingMode.DOWN));

  28. }

  29. }

输出结果如下:
1.67
1.66
1.34
1.33
1.00
1.00
————————————-
1.67
1.66
1.34
1.33
1.00
1.00

上面仅仅是根据我的需要举了BigDecimal.ROUND_UP和BigDecimal.ROUND_DOWN的例子,下面就用个表格来分析下。

ROUND_UP ROUND_DOWN
1.66728D 1.67 1.66
1.33333D 1.34 1.33
1.00000D 1.00 1.00

也就是说,ROUND_DOWN,是一个舍位取值的概念,我保留了两位小数,我不管你后面的小数值如何,也不会四舍五入,就硬生生的给阶段,相当于什么呢,就是我从小数点后面开始取两位,两位后面的都不要了,相当于一个截取字符串的操作。

而ROUND_UP那,很宽容,很大方,我不管你第三位的小数是多少,我都给你加一最小单位(比如保留两位小数,最小单位是0.01,保留三位小数,最小单位就是0.001),当然了,你保留到最后一位的数字如果是0的话,那么就不加了。

而这两个作用在咱们实际当中什么情况下不能使用四舍五入,需要用这两个呢?

用个应用题举例子吧,

一个篮子可以装10个苹果,现在有82个苹果,需要几个篮子来装?
9个,对,这是咱们的什么结果,不正是ROUND_UP的么(只不过这道题是取小数点后0位,也就是取整的区别而已),也就很好解释为什么最小单位是0不需要再加一个最小单位了,如果我只有80个苹果,8个篮子正好装下,就不需要第九个了。

那么什么时候儿需要使用ROUND_DOWN呢,再来看下面一个例子,
每个加油站相距8公里,一公里需要耗一个油,我现在车里还有90个油,请问,我最晚在第几个加油站必须得加油了?
11个,第十一个,就是在车使用88个油到达第11个加油站后需要加油,因为我还剩2个由已经撑不到第12个加油站了。这种情况,ROUND_DOWN就派上用场了。

 

转载地址:http://taoer.com/2010/07/10/java-bigdecimal-round_up-round_down-useage

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/158185.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!