首页 > 解决方案 > Java Math.signum 不评估锻炼错误

问题描述

我想问一个关于Math.signum()Java的问题。

作为 Java Dummies 系列教程的一部分,我编写了以下代码:

public class MathClass {
    public static void main (String [] args) {
        int a = 27;
        int b = -32;
        a = Math.abs(a) * Math.signum(b); // a is now -27
        System.out.println(a);
    }
}

我认为如果Math.signum(b)返回一个 float 的 value -1.0F,这意味着它a也将被转换为一个 float,并且 a 被赋值为-27。但是,当我运行此代码时,出现以下错误:

error: incompatible types: possible lossy conversion from float to int
    a = Math.abs(a) * Math.signum(b); // a is now -27

我对这个错误感到困惑。

我犯了什么错误?

标签: javatype-conversion

解决方案


你的错误是你调用了错误的signum()方法。

使用Integer.signum(int i)方法而不是Math.signum(float f)方法。

哦,如果您使用 printa而不是test,代码实际上会编译并运行。

int a = 27;
int b = -32;
a = Math.abs(a) * Integer.signum(b);
System.out.println(a); // prints: -27

推荐阅读