float a = 1.0F;
float b = 0.57F;
float c = a+b;
这时为什么c的值1.5699999啊?为什么不是1.57?然后把b改为0.51,即:
float a = 1.0F;
float b = 0.51F;
float c = a+b;
这是c的值为什么又是1.51了,到底什么时候会显示9999,什么时候可以精确显示啊?
float b = 0.57F;
float c = a+b;
这时为什么c的值1.5699999啊?为什么不是1.57?然后把b改为0.51,即:
float a = 1.0F;
float b = 0.51F;
float c = a+b;
这是c的值为什么又是1.51了,到底什么时候会显示9999,什么时候可以精确显示啊?
如果你想要精确一些的结果,用Demical这个类
大体说下,float的0.1二进制形式是001111011 10011001100110011001101,根据符号位换算为10进制表达的值精确应该是这样计算 110011001100110011001101乘以2的负27次方,实际值是0.100000001490116119384765625
这样就产生了实际误差
这个误差对我们生活小打小闹没啥影响,但是对科学计算和银行这样的应用或者领域是致命的,因此要用Java银行以及科学计算会用java.math.BigDecimal提高精度,否则后果极其严重。
可以详见http://topic.csdn.net/u/20110804/00/15380122-33a1-474a-9b7f-3e90a000f0a8.html
float b = 1.11111L;
BigDecimal bg1 = new BigDecimal(String.valueOf(a));
BigDecimal bg2 = new BigDecimal(String.valueOf(b));
BigDecimal bg3 = bg1.add(bg2);//加法,减法、乘法、除法,看API
float c = bg3.floatValue();