如果我没弄错,“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;
}
}
答案 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.5
是double
文字。对于float
文字,您需要编写0.5f
。
如Java语言规范(JLS 3.10.2)所述:
如果浮点文字后缀有ASCII字母
float
或F
,则其类型为f
;否则,其类型为double
,并且可以选择在其后缀ASCII字母D
或d
。
另请参阅:
答案 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;
希望这对您有所帮助。 :)