1. doubletaper

Java fournit le doubletype pour travailler avec des nombres réels (fractionnaires). Il occupe 8 bytesen mémoire (deux fois plus que le inttype) et peut stocker des valeurs comprises entre et . À titre de comparaison : le type peut stocker une valeur comprise entre et .-1.7*10308+1.7*10308int-2*109+2*109

Dans les nombres réels, la partie fractionnaire est écrite après un point décimal. Par exemple, 123,456, ou 2,5, ou 100,00, ou 0,01. Lorsque les ordinateurs traitent de tels nombres, nous les appelons des nombres à virgule flottante .

Soit dit en passant, en plus du doubletype, nous avons également le floattype (qui ne fait que 4 octets). Son nom vient de virgule flottante . Et le nom doublevient de double float . A doubleest deux fois plus grand que a float: 8 bytesversus 4. Il est aussi appelé nombre à virgule flottante double précision .


2. Créer un doubletype

Le type double est utilisé pour stocker des nombres réels. Pour créer une variable dans le code pouvant stocker des nombres réels, vous devez utiliser une instruction comme celle-ci :

double name;
Création d'un doublegenre

nom est le nom de la variable. Exemples:

Déclaration Description
double price;
Une variable réelle priceest créée
double weight;
Une variable réelle weightest créée
double lightSpeed;
Une variable réelle lightSpeedest créée

Comme pour le inttype, vous pouvez utiliser un raccourci pour créer plusieurs doublevariables simultanément :

double name 1, name 2, name 3;
Création de plusieurs doublevariables

Et même leur attribuer immédiatement des valeurs :

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
Création et initialisation de plusieurs doublevariables

Exemples:

Déclaration Note
double price = 5.0;
La variable stocke5.0
double weight = 2;
La variable stocke2.0
double x = 1.0, y = 2.0, z = 3.0;

3. Affectation d'entiers et de nombres réels

Ce serait mauvais si les nombres entiers pouvaient être assignés uniquement aux intvariables, et les nombres réels — uniquement aux doublevariables. Nous voulons pouvoir convertir entre les deux types de nombres. Et Java fournit cette capacité.

Tout d'abord, des nombres réels et entiers peuvent être affectés à doubledes variables. Lors de l'attribution d'entiers, ils sont simplement convertis en nombres réels. Bien sûr, une certaine précision peut être perdue au cours du processus.

Déclaration Note
double price = 5.0;
La variable stocke5.0
double weight = 2;
La variable stocke2.0
int t = 1000;
double x =  t * t;

La xvariable stocke1000000.0

Deuxièmement, si un entier et un nombre réel sont impliqués dans une expression, alors l'entier est d'abord converti en un nombre réel et alors seulement l'opération avec l'autre nombre réel est effectuée.

Déclaration Note
int t = 1000;
double x = t * 5.0;

La xvariable stocke5000.0
System.out.println(5 * 2);
Le numéro 10s'affichera à l'écran
System.out.println(5 * 2.0);
Le numéro 10.0s'affichera à l'écran

Et enfin, il est également possible d'affecter des nombres réels aux intvariables. Lorsque nous faisons cela, la partie fractionnaire du nombre réel est ignorée - le nombre est arrondi au nombre entier le plus proche.

De plus, le compilateur demande au programmeur de documenter explicitement ce qui se passe (pour être sûr que les autres programmeurs comprennent que la partie fractionnaire est supprimée). En général, une telle conversion ressemble à ceci dans le code :

integer_variable = (int)(real_number);
Affectation d'un nombre réel à une intvariable

Exemples:

Déclaration Note
int x = (int)(5.5);
La xvariable stocke5
double a = 5.999;
int x = (int)(a);
La xvariable stocke5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
La xvariable stocke11


4. Diviser des nombres entiers et des nombres réels en Java

Lors de la division d'un entier par un entier, le reste est toujours ignoré. Comment pouvons-nous alors diviser 5par 2pour obtenir 2.5?

Au début, il semble que la bonne option soit:

double d = 5 / 2;

Mais ce n'est pas si simple. Le problème ici est que la machine Java calcule d'abord la valeur de 5 / 2et ensuite seulement affecte le résultat à la dvariable. Et l' 5 / 2opération est la division entière. Cela signifie d contiendra 2ou, pour être plus précis,2.0

La bonne solution est d'écrire au moins un des nombres impliqués dans la division sous la forme d'un nombre réel (c'est-à-dire avec un point décimal) :

double d = 5.0 / 2;
double d = 5 / 2.0;
double d = 5.0 / 2.0;

Dans chacune des expressions, d contiendra2.5

Mais que se passe-t-il si nous travaillons avec des variables ? Et si nous avions un code comme celui-ci ? :

int a = 5;
int b = 2;
double d = a / b;

Il existe une solution astucieuse (et évidente) ici - forcez la machine Java à convertir les variables en nombres réels en les multipliant par un en tant que nombre réel ( 1.0)

int a = 5;
int b = 2;
double d = a * 1.0 / b;

Notez que la multiplication et la division ont la même priorité et sont effectuées de gauche à droite. Cela signifie qu'il importe où nous multiplions le 1.0.

Exemples:

Déclaration Ordre d'exécution Résultat
int a = 5;
int b = 2;
double d = 1.0 * a / b;
(1.0 * a) / b; 2.5
int a = 5;
int b = 2;
double d = a * 1.0 / b;
(a * 1.0) / b; 2.5
int a = 5;
int b = 2;
double d = a / b * 1.0;
(a / b) * 1.0; 2.0