53 votes

Quelle est la différence entre le casting vers `float` et l'ajout de `f` comme suffixe lors de l'initialisation d'un `float` ?

Quelle est la différence entre

float f = (float) 99.32 ;

et

float f = 99.32f ;

Les deux ont été compilés et ont fonctionné avec succès.

76voto

Magisch Points 2913
float f = 99.32f ;

C'est un float signifie qu'une variable flottante est assignée avec une valeur de float directement.

float f = (float) 99.32 ;

C'est un float qui se voit attribuer une double qui est casté en float avant d'être affecté.

23voto

skyking Points 1919

La différence peut être optimisée, mais dans le premier cas, vous avez un double littéral qui est converti en flottant alors que vous avez un flottant littéral dans le second cas.

S'il n'est pas optimisé, vous obtiendrez un typecast dans le code du deuxième exemple.

Toutefois, dans certains cas, le résultat pourrait être légèrement différent (en fonction du mode d'arrondi). Si votre nombre ne peut pas être représenté exactement, vous obtiendrez dans le premier cas un double arrondi - d'abord lorsque vous arrondissez la représentation décimale à un double, puis lorsque vous arrondissez à un flottant, alors que dans le premier cas, vous arrondissez directement la représentation décimale à un flottant.

10voto

Gopi Points 17042

Dans le premier cas, sans la distribution 99.32 est interprété comme un double et non comme un flottant.

Un double littéral est casté en flottant.

Dans le second cas, vous avez un suffixe f pour s'assurer que le compilateur traite 99.32 comme un flotteur.

9voto

40two Points 8224

Les littéraux à virgule flottante sans suffixe sont, par défaut, de type double type.

Ainsi, en déclarant float f = (float) 99.32; vous lancez d'abord explicitement littéral 99.32 qui est de type double à un float et l'assigne ensuite à la variable f .

En déclarant float f = 99.32; fait la même chose, mais dans ce cas, le La conversion entre les types se fait implicitement.

Si vous voulez éviter la conversion implicite, vous devez utiliser l'option f pour définir votre littéral (c'est-à-dire, float f = 99.32f; )

8voto

ray Points 89

Dans la ligne float f = (float) 99.32; le littéral 99.32 est créé en tant que double par défaut et est ensuite converti en un type float .

Dans la ligne float f = 99.32f ; le littéral est créé comme un float en raison de la fin de la phrase f en 99.32f et aucun moulage de type n'est nécessaire.

Cette dernière solution serait analogue à celle consistant à écrire double f = 99.32; comme vous auriez un double étant affectée directement à une variable de type correspondant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X