Возможное преобразование с потерями из 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;

Надеюсь, это поможет вам. :)