9

在 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 的原因是什么?

4

2 回答 2

7

你可能想知道:

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

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

Java 规范说明如下:

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

于 2012-08-10T20:05:48.847 回答
1

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

于 2020-07-26T01:16:33.120 回答