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? 但是实际操作中不是这样的 为什么呢 ?

解决方案 »

  1.   

    想问下2楼 System.out.println(4.0-2.1F); 
    会不会违背从低及到高及自动转换呢? =。=
      

  2.   

    Math类里的些方法就可以计算的
    abs(数据类型),求绝对值。 
    ceil(double a),取a上限值,如ceil(3.1)=4,ceil(3.6)=4。
    floor(double a),取a的下限值,如floor(3.1)=3,floor(3.7)=3
    print(double a),四啥五入操作。 
    exp(double a),求自然的a次方。 
    pow(double a,double b ),求a的b次方.
    random(),求0到1的随机数. 
      

  3.   

    浮点数值是采用二进制表示的,double 无法精确表示分数1/10 float无法精确表示分数1/3
    如果不想有舍入误差 楼主考虑下使用BigDecimal.
      

  4.   

    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);