首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2013-12-16 
告诉你一个真实的秘密:Java太烂了!会被淘汰!System.out.println((2.0-1.1)0.9)Why?[解决办法]该回复于2

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

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

Why?
[解决办法]
该回复于2013-12-15 09:12:15被管理员删除
[解决办法]
月经贴又来了。用浮点数吧System.out.println((2.0f-1.1f)==0.9f);
[解决办法]
精度跟语言无关。
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));
[解决办法]

引用:
月经贴又来了。用浮点数吧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

热点排行