124 votes

Division int : Pourquoi le résultat de 1/3 == 0 ?

J'écrivais ce code :

 public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

Le résultat est 0. Pourquoi et comment résoudre ce problème ?

26voto

Adrian Smith Points 6087

1/3 utilise la division entière car les deux côtés sont des entiers.

Vous devez au moins l'un d'entre eux être float ou double .

Si vous entrez les valeurs dans le code source comme votre question, vous pouvez faire 1.0/3 ; le 1.0 est un double.

Si vous obtenez les valeurs d'ailleurs, vous pouvez utiliser (double) pour transformer le int en double .

 int x = ...;
int y = ...;
double value = ((double) x) / y;

10voto

Charlie Points 303

Lancez-le explicitement en tant que double

 double g = 1.0/3.0

Cela se produit parce que Java utilise l'opération de division entière pour 1 et 3 puisque vous les avez entrés comme constantes entières.

2voto

Tom Points 16783

Parce que vous faites une division entière.

Comme le dit @Noldorin, si les deux opérateurs sont des entiers, la division entière est utilisée.

Le résultat 0.333333333 ne peut pas être représenté comme un entier, donc seule la partie entière (0) est affectée au résultat.

Si l'un des opérateurs est un double / float , alors l'arithmétique à virgule flottante aura lieu. Mais tu auras le même problème si tu fais ça :

 int n = 1.0 / 3.0;

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