2017-08-07 3 views
2

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; 
+11

' 333.50' est un double littéral. Un littéral flottant serait '333.50f'. Fondamentalement, le double est la valeur par défaut. – khelwood

+0

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

Répondre

0

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 
1

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.

0

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 
2

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 lettre F ou f; sinon son type est double et il peut éventuellement se terminer par la lettre D ou d.

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; 
3

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 lettre F ou f; sinon son type est double et il peut éventuellement se terminer par la lettre D ou d.

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 lettre L ou l; sinon c'est de type int. Il est recommandé d'utiliser la lettre majuscule L car la lettre minuscule l est difficile à distinguer du chiffre 1.

0

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