关于浮点数型加减的有关问题

关于浮点数型加减的问题
System.out.println(4.0-2.1F);
System.out.println(4.0F-2.1);
为什么第1个的答案是1.9000000953674316 第2个的答案是1.9
 我是刚接触JAVA的 在书上的自动类型转换上说JAVA的从低及到高及自动转换的 
  而4.0是double 2.1F是Float
 按道理说是不是应该向double转? 也就是说2个答案全是1.9? 但是实际操作中不是这样的 为什么呢 ?

------解决方案--------------------
计算机无法精确表示浮点数
看一下以往的帖子或者回去看看计算机组成原理,明白浮点数IEEE754表示法的格式
------解决方案--------------------
java 中对浮点数的计算默认是double型的,也就是说你第一句中的4.0是double型的
而2.1F是float型的,你用double型减float型时这个2.1将被隐式的转换成double型
然后才计算
第2句:就是用float型减float型所以结果是float型的。因为+-*/运算符都是偏向左侧操作数的所以2.1被隐式转换成float型了。
如果你用float型减double型是会报错的,不信你可以这样试一下:
float a=4.0;
double b=2.1;
System.out.println(a-b);