告诉你一个真实的秘密:Java太烂了!会被淘汰!

Jack123 2013-12-14 10:11:39

System.out.println((2.0-1.1)==0.9);

Why?
...全文
872 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
poooll 2013-12-14
  • 打赏
  • 举报
回复
引用 2 楼 huxiweng 的回复:
月经贴又来了。用浮点数吧System.out.println((2.0f-1.1f)==0.9f);
你这个有问题,如果是这样 System.out.println((2.0001f-1.1001f) == 0.9f); BigDecimal d1 = new BigDecimal("2.0001") ; BigDecimal d2 = new BigDecimal("1.1001") ; BigDecimal d3 = new BigDecimal("0.9") ; d1 = d1.subtract(d2); System.out.println(d1); System.out.println(d1.compareTo(d3)); // 发现equals也不行。会存在0.90 !=0.9
poooll 2013-12-14
  • 打赏
  • 举报
回复
精度跟语言无关。 float/double:有限的空间(如64位)表示无限的数据(一个区间小数是无限的)必然存在精度问题。 下面就不会错了,注意数字都是字符串。不要传float。 BigDecimal d1 = new BigDecimal("2.0") ; BigDecimal d2 = new BigDecimal("1.1") ; BigDecimal d3 = new BigDecimal("0.9") ; d1 = d1.subtract(d2); System.out.println(d1.equals(d3));
teemai 2013-12-14
  • 打赏
  • 举报
回复
月经贴又来了。用浮点数吧System.out.println((2.0f-1.1f)==0.9f);

62,615

社区成员

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

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