Mogelijke conversie met verlies van double naar float, gegeven float-waarden?

Als ik me niet vergis, zijn “0.5” decimale getallen; dus, waardoor het een float-waarde wordt. maar waarom vertelt Java me dat het een dubbele is?. de return-statements worden door java als fouten gedetecteerd en zeggen: “incompatible types:possible lossy conversion from 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;
        }
    }

Antwoord 1, autoriteit 100%

Als ik me niet vergis, 0.5 zijn decimale getallen; dus, waardoor het een float-waarde wordt.

Je moet niet alleen vertrouwen op je intuïtie bij het leren van een nieuwe programmeertaal.

In feite is 0.5 een Double letterlijke. Voor een letterlijke float moet je 0.5f schrijven.

Als de Java-taalspecificatie (JLS 3.10.2) stelt:

Een letterlijke drijvende komma is van het type float als het wordt achtervoegd met een ASCII-letter f of f; anders is het type Double en kan het optioneel worden voorzien van een ASCII-letter d of d.

Zie ook:


Antwoord 2, autoriteit 70%

Je hebt twee opties.

Een daarvan is het retourtype van uw methode wijzigen in double.

De andere is het wijzigen van de dubbele waarden die u terugstuurt naar zwevende waarden, zoals velen in de opmerkingen hebben gezegd.

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;
    }
}

Antwoord 3, autoriteit 20%

In Java hebben we float en double als literalen met drijvende komma, waarbij double het standaard gegevenstype is van letterlijke getallen met drijvende komma en niet de float. Dit is de reden waarom Java je vertelt dat 0.5 een dubbele is.

Mogelijke conversie:

1) float a = (float) 0.5;

2) zwevend a = 0,5f;

En de reden voor conversie met verlies is dat double groter is dan float. Als je de grotere in de kleinere probeert te passen, krijg je deze foutmelding.


Antwoord 4, autoriteit 10%

In Java wordt elke decimale waarde zonder letterlijke waarde Double.
Je moet dus de Float (F) achter de uitdrukking vermelden.
bijv. Float f = 10.5F;

Ik hoop dat dit je helpt. 🙂

LEAVE A REPLY

Please enter your comment!
Please enter your name here

thirteen + 20 =

Other episodes