首页 > 解决方案 > 我不明白“从 double 到 int 的可能有损转换”是什么意思

问题描述

public class MyClass {
    public static void main(String args[]) {
        int n,h,w,i;
        double t;
        h = 40;
        w = 5;
        i = 2;
        t = 0.22;
        n=(h*w-i)-t*(h*w-i);
        System.out.println(n);
    }
}

在第 13 行它说“/MyClass.java:9:错误:不兼容的类型:可能有损从 double 转换为 int n=(h w-i)-t (h*wi);”,这是什么意思,以及如何我要修复它吗?

标签: javadebugging

解决方案


这是什么意思:t作为一个双精度,表达式(h*w-i)-t*(h*w-i)返回一个双精度 (154.44)。然而,n作为一个 int,您尝试将一个 double 值分配给一个 int 变量。这会导致错误,因为这种转换不是由 Java 隐式完成的,因为它会是有损的(在规范中称为 Narrowing Primitive Conversion:https ://docs.oracle.com/javase/specs/jls/se7/html/jls- 5.html)。“缩小原始转换可能会丢失有关数值整体大小的信息,也可能会丢失精度和范围。” 意味着:您会丢失有关小数的信息。

如何处理它:这取决于期望的结果: - 你想要一个双返回值 => 制作n一个双变量 - 你想要一个 int 返回值 => 强制(h*w-i)-t*(h*w-i)转换为 int。要么是强迫它 int: n=(int)(…)。或者通过使用//(https://docs.oracle.com/javase/10/docs/api/java/lang/Math.html(int)Math.round())显式使其更加透明.floor().ceil()


推荐阅读