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-letterf
off
; anders is het typeDouble
en kan het optioneel worden voorzien van een ASCII-letterd
ofd
.
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. 🙂