请教大家一个基本问题,关于double奇怪问题,我用double算钱数,是不是不适合?

msn365 2007-09-21 03:39:46
double d0 = 2.00 + 0.98;
double d1 = 2.00 + 31.98;
double d2 = 33.98 - d1;

System.out.println(d0);
System.out.println(d1);
System.out.println(d2);

输出:
2.98
33.980000000000004
-7.105427357601002E-15

请问如果我用double算钱数那么d2期望的应该是0,但实际不是,请问如何解决?
...全文
216 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
amazeur 2007-09-21
  • 打赏
  • 举报
回复
up
cursor_wang 2007-09-21
  • 打赏
  • 举报
回复
你如果计算好了输出用(jdk1.5后)System.out.printf("%2.2f\n",d1);也可以的.
bushuang 2007-09-21
  • 打赏
  • 举报
回复
计算机运算是使用二进制代码进行相关的计算,而在程序中是以十进制为基础的,所以会有误差.
解决方法有很多。用BigDecimal并不是解决方案.下面告诉你一种解决的思想.
因为金额的小数位数有限,那么你完全可以将数据保存在整型中,进行输出时就缩小倍数输出
wshsm 2007-09-21
  • 打赏
  • 举报
回复
double d1 = 2000 + 31980;
double d2 = 33980 - d1;
double result = d2/1000;
spskysp 2007-09-21
  • 打赏
  • 举报
回复
建议用BigDecimal计算 然后再进行转化

62,623

社区成员

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

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