Java允许将int隐式转换为float。为什么?

时间:2012-08-10 19:58:32

标签: java

在Java中,我们可以隐式地将int转换为float,这可能导致精度损失,如下面的示例代码所示。

public class Test {
    public  static void main(String [] args) {
        int intVal = 2147483647;
        System.out.println("integer value is " + intVal);
        double doubleVal = intVal;
        System.out.println("double value is " + doubleVal);
        float floatVal = intVal;
        System.out.println("float value is " + floatVal);
        }
}

输出

integer value is 2147483647
double value is 2.147483647E9
float value is 2.14748365E9

当精度损失时,允许将int隐式转换为float的原因是什么?

2 个答案:

答案 0 :(得分:6)

你可能想知道:

  

为什么在信息丢失时这是隐式转换?这不应该是显式转换吗?

你当然有一个好主意。但语言设计者决定,如果目标类型的范围足够大,则允许隐式转换,即使可能会丢失精度。请注意,范围是重要的,而不是精度。 float的范围大于int,因此它是隐式转换。

Java specification说明如下:

  

将int或long值扩展为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,使用IEEE 754舍入到最接近模式,得到的浮点值将是整数值的正确舍入版本。

答案 1 :(得分:1)

将整数类型转换为使用相同位数的浮点类型可能会导致精度损失,但会自动完成。 “精度损失”是指一些不太重要的数字可能变为零,但最重要的数字和数字的大小将保持不变。回想一下,float仅具有大约七个十进制数字的精度。例如,将int 123456789转换为float 123456700.0会显示精度损失。