Wat is het verschil tussen casten naar `float` en het toevoegen van `f` als achtervoegsel bij het initialiseren van een `float`?

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 floatvoordat 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.32geï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 fom ervoor te zorgen dat de compiler 99.32als float behandelt.


Antwoord 4, autoriteit 13%

In de regel float f = (float) 99.32;wordt de letterlijke 99.32standaard 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 fin 99.32fen 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.32van het type doubletoe aan een floaten 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 fgebruiken om uw letterlijke (d.w.z. float f = 99.32f;)

te definiëren.


Antwoord 6, autoriteit 8%

Het verschil is dat de letterlijke 99.32van het type double is, terwijl de letterlijke 99.32fvan 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.

Other episodes