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 ?
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 ?
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;
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 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.