给定浮点值,可能有损转换从double到float?

时间:2014-02-08 12:06:31

标签: java

如果我没弄错,“0.5”是十进制数字;因此,使其成为浮动值。但为什么java告诉我它是双重的?返回语句被java检测为错误,说:“不兼容的类型:从double到float的可能有损转换”

public float typeDmgMultiplr(String type,String type2){
        if(type.equalsIgnoreCase("grass")){
            if(type2.equalsIgnoreCase("grass"))
                return 0.5;
            else if(type2.equalsIgnoreCase("poison"))
                return 0.5;
            else if(type2.equalsIgnoreCase("fire"))
                return 0.5;
            else
                return 2.0;
        }
        else if(type.equalsIgnoreCase("fire")){
            if(type2.equalsIgnoreCase("grass"))
                return 2.0;
            else if(type2.equalsIgnoreCase("poison"))
                return 1.0;
            else if(type2.equalsIgnoreCase("fire"))
                return 0.5;
            else
                return 0.5;
        }
        else if(type.equalsIgnoreCase("water")){
            if(type2.equalsIgnoreCase("grass"))
                return 0.5;
            else if(type2.equalsIgnoreCase("poison"))
                return 1.0;
            else if(type2.equalsIgnoreCase("fire"))
                return 2.0;
            else
                return 0.5;
        }
        else{
            if(type2.equalsIgnoreCase("grass"))
                return 2.0;
            else if(type2.equalsIgnoreCase("poison"))
                return 0.5;
            else if(type2.equalsIgnoreCase("fire"))
                return 1.0;
            else
                return 1.0;
        }

    }

4 个答案:

答案 0 :(得分:5)

您有两种选择。

一个是将你的方法的返回类型改为double。

另一个是更改你返回浮点值的双值,正如许多人在评论中所说的那样。

public float typeDmgMultiplr(String type,String type2){
    if(type.equalsIgnoreCase("grass")){
        if(type2.equalsIgnoreCase("grass"))
            return 0.5f;
        else if(type2.equalsIgnoreCase("poison"))
            return 0.5f;
        else if(type2.equalsIgnoreCase("fire"))
            return 0.5f;
        else
            return 2.0f;
    }
    else if(type.equalsIgnoreCase("fire")){
        if(type2.equalsIgnoreCase("grass"))
            return 2.0f;
        else if(type2.equalsIgnoreCase("poison"))
            return 1.0f;
        else if(type2.equalsIgnoreCase("fire"))
            return 0.5f;
        else
            return 0.5f;
    }
    else if(type.equalsIgnoreCase("water")){
        if(type2.equalsIgnoreCase("grass"))
            return 0.5f;
        else if(type2.equalsIgnoreCase("poison"))
            return 1.0f;
        else if(type2.equalsIgnoreCase("fire"))
            return 2.0f;
        else
            return 0.5f;
    }
    else{
        if(type2.equalsIgnoreCase("grass"))
            return 2.0f;
        else if(type2.equalsIgnoreCase("poison"))
            return 0.5f;
        else if(type2.equalsIgnoreCase("fire"))
            return 1.0f;
        else
            return 1.0f;
    }

}

答案 1 :(得分:3)

  

如果我没记错的话,0.5是十进制数字;因此,使其成为浮点值。

学习新的编程语言时,您不应仅凭直觉。

实际上,0.5double文字。对于float文字,您需要编写0.5f

如Java语言规范(JLS 3.10.2)所述:

  

如果浮点文字后缀有ASCII字母floatF,则其类型为f;否则,其类型为double,并且可以选择在其后缀ASCII字母Dd

另请参阅:

答案 2 :(得分:1)

在Java中,我们有float和double作为浮点文字,其中 double 是浮点文字而不是浮点的默认数据类型。这就是java告诉您 0.5是双精度的原因。

可能的转换:

1)float a =(float)0.5;

2)浮点a = 0.5f;

进行有损转换的原因是,double大于float。当您尝试将较大的一个装入较小的一个时,会出现此错误。

答案 3 :(得分:0)

在Java中,任何没有文字的十进制值都将作为Double
因此,您必须在表达式后面提及Float (F)。 例如。 Float f = 10.5F;

希望这对您有所帮助。 :)