关于小数点后四舍五入保留小数的方法

神笔马良 2012-04-05 06:31:06

double f = 111231.5585;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

我用这个方法来保留小数。当为2时结果是111231.56
当为1时,结果为111231.6
当为3时结果是:111231.558(按照四舍五入是不是应该是111231.559)为什么会这样?
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
神笔马良 2012-04-05
  • 打赏
  • 举报
回复
原来是这样,谢谢大神。。[Quote=引用 1 楼 的回复:]

二进制浮点小数问题。

当你写:
double f = 111231.5585;
的时候,计算机实际存储的是:
double f = 111231.558499999999185092747211456298828125

所以后面你就理解了。

要解决这个问题,只能:
BigDecimal b = new BigDecimal("111231.5585");
[/Quote]
MiceRice 2012-04-05
  • 打赏
  • 举报
回复
二进制浮点小数问题。

当你写:
double f = 111231.5585;
的时候,计算机实际存储的是:
double f = 111231.558499999999185092747211456298828125

所以后面你就理解了。

要解决这个问题,只能:
BigDecimal b = new BigDecimal("111231.5585");

62,614

社区成员

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

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