得到错误:不兼容的类型:可能有损转换为类型提升代码的 double 到 float

问题描述

我在执行以下代码时不明白错误

public class Main{
    public static void main (String[] args) {
        byte b=2;
        short s=7;
        int i=11002;
        char c = 's';
        float f = 9.987;
        double d = .879;
        int res = (f*b) + (i/c) - (d*s);
        System.out.println("(f*b) + (i/c) - (d*s)");
        System.out.println("result = "+res);
    }
}

我得到的错误

Main.java:7: 错误:不兼容的类型:从双精度到浮点的可能有损转换 浮动 f = 9.987; ^ Main.java:9: 错误:不兼容的类型:从 double 到 int 的可能有损转换 int res = (fb) + (i/c) - (ds); ^ 2 错误

解决方法

我猜你是 Java 初学者。所以你犯的错误是类型转换。您不能为浮点类型分配双精度值。

试试这个代码

public class Main{
    public static void main (String[] args) {
        byte b=2;
        short s=7;
        int i=11002;
        char c = 's';
        float f = 9.987f;
        double d = .879;
        int res = (int) ((f*b) + (i/c) - (d*s));
        System.out.println("(f*b) + (i/c) - (d*s)");
        System.out.println("result = "+res);
    }
}

如果您以后不想再遇到这个问题,请了解类型转换(自动转换和显式转换)。

,

不同数据类型之间的运算结果总是最大的类型(这里是double)。 如果您想将结果保留为 int :查看转换值。

它应该是这样的:int res = (int) ((f*b) + (i/c) - (d*s))

否则,使结果为双倍。

另外,java中的浮动需要在最后有f:float f = 9.987f;