Pourquoi dans cette ligne le nombre à virgule flottante est traité comme double? Je pensais que le flotteur avait suffisamment d'espace pour contenir ce nombre.Pourquoi le nombre à virgule flottante 333.50 est le double
float f = (float)333.50;
Pourquoi dans cette ligne le nombre à virgule flottante est traité comme double? Je pensais que le flotteur avait suffisamment d'espace pour contenir ce nombre.Pourquoi le nombre à virgule flottante 333.50 est le double
float f = (float)333.50;
par virgule flottante par défaut littéral est double
en java, si vous voulez que la valeur de flotter, vous pouvez le faire
float f = 333.5f
333.50
est un littéral de type double
. C'est simplement la règle - cela vient de C dans les années 1970. C'est comme 0
est un littéral de type int
.
Le littéral équivalent float
est 333.5f
, ou vous pouvez utiliser une expression constante évaluable de temps de compilation comme (float)333.50
.
En effet 333.5
peut être représenté exactement comme float
comme il est un dyadique rationnel.
Voici comment vous définissez littéraux en java (JLS)
int a = 12;
long b = 12L;
float c = 12.0f;
double d = 12.0d;
afin que vous puissiez écrire les autres;
i = 1222;
est un entier littéral
et de la même manière
j = 3.1415;
est un double littéral
Bien sûr, vous pouvez EXPLICITE définir le type:
i = 1222L; //for long values
j = 3.1415f; //for float values
Becaus La spécification Java indique que, par défaut, un littéral à virgule flottante est une valeur double
.
à virgule flottante littéraux
Un littéral à virgule flottante est de type
float
si elle se termine par la lettreF
ouf
; sinon son type estdouble
et il peut éventuellement se terminer par la lettreD
oud
.
Plutôt que d'utiliser une conversion de rétrécissement (double
à float
), il suffit d'utiliser le préfixe F
dans la déclaration littérale:
float f = 333.50F;
La valeur 333.50
peut être représentée dans le type float
mais est un à double littéral. Utilisez 333.50F
pour obtenir un littéral flottant .
La spécification, voir Oracle Java documentation about Primitive Data Types, est clair sur les différents littéraux:
à virgule flottante littéraux
Un littéral à virgule flottante est de type
float
si elle se termine par la lettreF
ouf
; sinon son type estdouble
et il peut éventuellement se terminer par la lettreD
oud
.
Il y a un cas similaire pour littéraux entiers mais ici le type plus petit (int
) est la valeur par défaut:
entiers littéraux
Un littéral entier est de type
long
si il se termine par la lettreL
oul
; sinon c'est de type int. Il est recommandé d'utiliser la lettre majusculeL
car la lettre minusculel
est difficile à distinguer du chiffre1
.
Java par défaut traite toutes les valeurs de la virgule décimale comme le double. Vous devez donc définir en particulier le type de type de données primitif que vous utilisez. par exemple:
`int i=10; // default
long l=123456L;
float f=123.12F;
double d=123.12345; // default
` vous devez donc définir explicitement le type de ce type de données que vous utilisez lorsque vous n'utilisez pas les types par défaut
' 333.50' est un double littéral. Un littéral flottant serait '333.50f'. Fondamentalement, le double est la valeur par défaut. – khelwood
En C et C++, le type * dépend * de l'amplitude du littéral, bien que pour les types entiers. C'est une question juste. – Bathsheba