Возможное преобразование с потерями из double в float, с учетом значений float?
если я не ошибаюсь, "0,5" - это десятичные числа; таким образом, делая его плавающей стоимостью. но почему Java говорит мне, что это двойной?. операторы return обнаруживаются как ошибки java, говоря: "несовместимые типы: возможное преобразование с потерями из double to 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;
}
}
Ответы
Ответ 1
У вас есть два варианта.
Один из них изменит тип возвращаемого метода на двойной.
Другим является изменение двойных значений, возвращаемых значениям float, как многие говорили в комментариях.
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;
}
}
Ответ 2
Если я не ошибаюсь, 0.5
- десятичные числа; таким образом, делая это значение с плавающей точкой.
Вы не должны полагаться исключительно на свою интуицию при изучении нового языка программирования.
На самом деле, 0.5
- это double
литерал. Для литерала с float
вам нужно написать 0.5f
.
Как указано в спецификации языка Java (JLS 3.10.2):
Литерал с плавающей точкой имеет тип float
если к нему добавлена буква ASCII F
или f
; в противном случае его тип является double
и к нему можно добавить суффикс ASCII-буквы D
или d
.
Смотрите также:
Ответ 3
В Java любое десятичное значение без литерала принимает значение Double
.
Итак, вы должны упомянуть Float (F)
за выражением. Например, Float f = 10.5F;
Надеюсь, это поможет вам. :)