JAVA中两个接近于float取值最大限的float数相加为Infinity,为什么?

相加后会超过最大取值,所以我把相加的结果赋给了double类型,但是输出double结果还是Infinity
float f = 331111111111111111111111111111111111111f;
float d = 299999999999999999999999999999999999999f;
double e = f+d;
System.out.println(e);

第1个回答  2014-12-03
首先我想说两个float相加本身就不容易得到精确的数字,其次JAVA中float为四个字节,double为八个字节,float--->double时候会补位,如果这里补位不出现误差的话应该可以实现。你先将float类型数据包装成BigDecimal数据,然后调用其floatValue()方法可以实现。
第2个回答  2014-12-03
相加的结果已经溢出了,你再转换成double有何用呢?先把两个数转换成double,再相加,最后仍赋值给double型
第3个回答  2014-12-03
double e = (double)f + d;
把其中一个转成double即可,否则不会自动升级本回答被网友采纳