请问2个float相加会是这样?

float f0 = 0.021f;
float f1 = 0.022f;
out.println(f0);
out.println(f1);
out.println(f0 + f1);

结果:
0.021
0.022
0.042999998

为什么不是0.043?

因为浮点数在系统中使用的是二进制的科学计数法,浮点运算有误差。很多编程语言都有这种问题。所以引入了专门的十进制运算的类型或者函数来进行计算。
在Java中,就是BigDecimal类。

这是由于java浮点类型的计算精度问题

你要得到精确的数,应该使用BigDecimal

浮点数在计算机中的表示为[img]http://dl.iteye.com/upload/picture/pic/57209/af24af11-c253-3d87-9794-a70c63b7d6fb.png[/img]
存储的是值a和值b

比如:0.042999998首先转为为2进制(存在误差),然后转为2进制的科学表示法(相当如10进制的科学表示法)(也存在误差)。
[code="java"]float f0 = 0.021f;
float f1 = 0.022f;
out.println(f0);
out.println(f1);
out.println(f0 + f1);
[/code]
这个程序也真实的反应了这个原理。

浮点数可以精确到七位有效数字,你的计算结果:

[code="java"]out.println(f0 + f1);[/code]

0.042999998

保留了八位有效数字 (最后一位是估计的)

这是由于java浮点类型的计算精度问题

你要得到精确的数,应该使用BigDecimal
BigDecimal b1 = BigDecimal.valueOf(f0);

BigDecimal b2 = BigDecimal.valueOf(f1);

System.out.println(b1.add(b2).floatValue());

你这样试试就没有问题了