关于有多位小数的四舍五入问题,求救呀......

正在努力的PP君 2017-04-07 05:45:54
先上代码:

Double db=15.905;
System.out.println(db);//TODO:注意删除
BigDecimal big1=new BigDecimal(db).setScale(2, RoundingMode.HALF_UP);
System.out.println("RoundingMode.HALF_UP:"+big1);//TODO:注意删除
BigDecimal big2=new BigDecimal(db).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("BigDecimal.ROUND_HALF_UP:"+big2);//TODO:注意删除

System.out.println("-----------------------------------");//TODO:注意删除

Double db2=15.906;
System.out.println(db2);//TODO:注意删除
BigDecimal big21=new BigDecimal(db2).setScale(2, RoundingMode.HALF_UP);
System.out.println("RoundingMode.HALF_UP:"+big21);//TODO:注意删除
BigDecimal big22=new BigDecimal(db2).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("BigDecimal.ROUND_HALF_UP:"+big22);//TODO:注意删除

System.out.println("-----------------------------------");//TODO:注意删除

Double db3=15.901;
System.out.println(db3);//TODO:注意删除
BigDecimal big31=new BigDecimal(db3).setScale(2, RoundingMode.HALF_UP);
System.out.println("RoundingMode.HALF_UP:"+big31);//TODO:注意删除
BigDecimal big32=new BigDecimal(db3).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("BigDecimal.ROUND_HALF_UP:"+big32);//TODO:注意删除

后台:

15.905
RoundingMode.HALF_UP:15.90
BigDecimal.ROUND_HALF_UP:15.90
-----------------------------------
15.906
RoundingMode.HALF_UP:15.91
BigDecimal.ROUND_HALF_UP:15.91
-----------------------------------
15.901
RoundingMode.HALF_UP:15.90
BigDecimal.ROUND_HALF_UP:15.90

按照保留两位四舍五入的原则,15.905应该是15.91,但是用BigDecimal进行处理,15.905会变成15.90,这是为什么的?有什么解决方法吗?
...全文
180 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程点滴 2017-04-07
  • 打赏
  • 举报
回复

        BigDecimal bigDecimal1 = new BigDecimal(19.501);
        System.out.println(bigDecimal1.setScale(2, BigDecimal.ROUND_HALF_UP));
        BigDecimal bigDecimal2 = new BigDecimal(19.506);
        System.out.println(bigDecimal2.setScale(2, BigDecimal.ROUND_HALF_UP));
我用这个可以实现啊
  • 打赏
  • 举报
回复
引用 1 楼 qq_30831935 的回复:
BigDecimal big1 = new BigDecimal(db).setScale(2, RoundingMode.UP); BigDecimal big2 = new BigDecimal(db).setScale(2, BigDecimal.ROUND_UP);
15.901 BigDecimal.ROUND_UP:15.91 但是15.901应该是15.90,不应该是15.91
鱿鱼ing 2017-04-07
  • 打赏
  • 举报
回复
BigDecimal big1 = new BigDecimal(db).setScale(2, RoundingMode.UP); BigDecimal big2 = new BigDecimal(db).setScale(2, BigDecimal.ROUND_UP);

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧