Wat is het verschil tussen
float f = (float) 99.32 ;
en
float f = 99.32f ;
Beide gecompileerd en succesvol uitgevoerd.
Antwoord 1, autoriteit 100%
float f = 99.32f ;
Dat is een letterlijke float
, wat betekent dat een variabele float direct wordt toegewezen met een float
-waarde.
float f = (float) 99.32 ;
Dat is een float
-variabele waaraan een double
-waarde wordt toegewezen die wordt gecast naar float
voordat deze wordt toegewezen.
Antwoord 2, autoriteit 29%
Het verschil kan weg worden geoptimaliseerd, maar in het eerste geval heb je een dubbele literaal die wordt getypeerd naar een float, terwijl je een float letterlijke hebt in het tweede geval.
Als het niet is geoptimaliseerd, krijg je een typecast in de code in het tweede voorbeeld.
Er zijn echter hoekgevallen waarin het resultaat (afhankelijk van de afrondingsmodus) enigszins kan afwijken. Als uw getal niet precies kan worden weergegeven, wordt u in het eerste geval twee keer afgerond – eerst wanneer u de decimale weergave op een dubbel afrondt en vervolgens wanneer u dat afrondt op een float, terwijl u in het eerste geval de decimale weergave direct afrondt naar een vlotter.
Antwoord 3, autoriteit 13%
In het eerste geval zonder de cast wordt 99.32
geïnterpreteerd als dubbel en niet als float.
Er wordt een dubbele letterlijke letter gegoten om te zweven.
In het tweede geval heb je een achtervoegsel f
om ervoor te zorgen dat de compiler 99.32
als float behandelt.
Antwoord 4, autoriteit 13%
In de regel float f = (float) 99.32;
wordt de letterlijke 99.32
standaard gemaakt als een double
-type en wordt vervolgens gecast naar een float
.
In de regel float f = 99.32f ;
wordt de letterlijke waarde gemaakt als een float
-type vanwege de achterliggende f
in 99.32f
en er is geen typecasting vereist.
Dit laatste zou analoog zijn aan het schrijven van double f = 99.32;
, aangezien u een double
-type rechtstreeks zou toewijzen aan een variabele van een overeenkomend type.
p>
Antwoord 5, autoriteit 11%
Drijvende-kommaliteralen zonder achtervoegsel zijn standaard van het type double
.
Dus, met float f = (float) 99.32;
cast je eerst explicietletterlijk 99.32
van het type double
toe aan een float
en wijs het dan toe aan variabele f
.
Het vermelden van float f = 99.32;
doet hetzelfde, maar in dit geval wordt de conversie tussen typen impliciet gedaan.
Als u impliciete conversie wilt vermijden, moet u het achtervoegsel f
gebruiken om uw letterlijke (d.w.z. float f = 99.32f;
)
te definiëren.
Antwoord 6, autoriteit 8%
Het verschil is dat de letterlijke 99.32
van het type double is, terwijl de letterlijke 99.32f
van het type float is.
De eerste instructie wijst de letterlijke waarde float toe aan een variabele float. Niets bijzonders.
De tweede instructie werpt een dubbele letterlijke waarde naar een float en wijst het resultaat toe aan een float-variabele.
Wat de standaard betreft, kun je een dubbele letterlijke waarde toekennen aan een float-variabele, zonder deze zelf expliciet te casten. In dat geval treedt impliciete casting op. bijv. :
float f = 99.32;
Je kunt zelfs het volgende doen:
float f = (double) 10.5f;
en de rechterkant is nog steeds impliciet geconverteerd naar een float.
Houd er rekening mee dat de meeste moderne compilers die weg optimaliseren, dus het weergeven van floats is meestal een kwestie van stijl en voorkeur. Wees gewoon consistent.