OVH Cloud OVH Cloud

Problème de compilation

7 réponses
Avatar
thoralfgutierrez
Voil=E0 je suis en train de faire un petit programme de conversion (
Chiffres Arabes =3D> Chiffres Romains ) et j'ai quelque difficult=E9 pour
extraire l'unit=E9,la dizaine ou la centaine d'un nombre :
J'ai ceci comme code :

int nombre;
double Nombre =3D nombre;

int unit=E9s =3D (Nombre/10 - nombre/10) * 10;

Alors "nombre" est le nombre que l'uilisateur a donner plus tot.

ex pour nombre =3D 1256 :

(1256/10 - 1256/10) * 10
(125.6 - 125) * 10
0=2E6 * 10
6

normalement j'extrait donc bien l'unit=E9 du nombre mais le compilateur
me r=E9pond :

possible loss of precision

Quelqu'un pourrait me dire comment =E9vit=E9 cette erreur de compilation
et pourquoi elle existe ?

7 réponses

Avatar
Julien Ghaye
writes:

Voilà je suis en train de faire un petit programme de conversion (
Chiffres Arabes => Chiffres Romains ) et j'ai quelque difficulté p our
extraire l'unité,la dizaine ou la centaine d'un nombre :
J'ai ceci comme code :

int nombre;
double Nombre = nombre;

int unités = (Nombre/10 - nombre/10) * 10;

Alors "nombre" est le nombre que l'uilisateur a donner plus tot.

ex pour nombre = 1256 :

(1256/10 - 1256/10) * 10
(125.6 - 125) * 10
0.6 * 10
6

normalement j'extrait donc bien l'unité du nombre mais le compilateur
me répond :

possible loss of precision

Quelqu'un pourrait me dire comment évité cette erreur de compil ation


Pour éviter cette erreur ... enfin ce warning, je te conseil d'utiliser
un autre approche quant à la manière d'extraire les unités d 'un nombre
entier. Il suffit juste de prendre le modulo 10 de ce nombre et hop,
c'est fait :D.
Tiens voila un tit exemple d'une méthode qui renvoit les unité d' un
nombre (nombre en base 10 bien entendu) :

public int unite(int number) {
return number % 10;
}

Et voila. C'est aussi simple que ca.

et pourquoi elle existe ?


Ce warning te prévient juste que tu repasses d'un 'double' à un ' int',
ce qui induit généralement des pertes de précision (car tu p erds toutes
les décimales en fait)

Bonne prog ;-)
Julien

Avatar
Black Myst
wrote:
Voilà je suis en train de faire un petit programme de conversion (
Chiffres Arabes => Chiffres Romains ) et j'ai quelque difficulté pour
extraire l'unité,la dizaine ou la centaine d'un nombre :
J'ai ceci comme code :

int nombre;
double Nombre = nombre;

int unités = (Nombre/10 - nombre/10) * 10;

Alors "nombre" est le nombre que l'uilisateur a donner plus tot.

ex pour nombre = 1256 :

(1256/10 - 1256/10) * 10
(125.6 - 125) * 10
0.6 * 10
6

normalement j'extrait donc bien l'unité du nombre mais le compilateur
me répond :

possible loss of precision

Quelqu'un pourrait me dire comment évité cette erreur de compilation
et pourquoi elle existe ?


Bien que ce ne soit pas la bonne solution, voila le code que tu dois
ecrire pour ne pas avoir d'erreur :

int nombre = ?;
int res = ( ((int)(((double)res)/10)) - res/10 ) * 10;
Toutes les parenthèses ne sont pas necessaire...


La bonne solution est bien plus simple :
int nombre = ?;
int res = nombre % 10;

a%b correspond au reste de la division entiere de a/b, c'est exactement
ce que tu veux.

cdt,
Myst

Avatar
MoxLotus
Ok ok Merci les gars ! :D
Ca m'aide beaucoup !
Avatar
MoxLotus
Bon pour l'unité ca fonctionen a merveille ( int res = nombre % 10; )
Mais comment utiliser la meme chose pour extraire la dizaine ou la
centaine ?
Et est ce que tu pourrait m'expliquer int res = (
((int)(((double)res)/10)) - res/10 ) * 10; ... Je ne vois pas trop a
quoi cela corespond ( le double par exemple, que fait il là tout seul
? )

Encore merci pour votre patience
Avatar
MoxLotus
Bon pour l'unité ca fonctionen a merveille ( int res = nombre % 10; )
Mais comment utiliser la meme chose pour extraire la dizaine ou la
centaine ?
Et est ce que tu pourrait m'expliquer int res = (
((int)(((double)res)/10)) - res/10 ) * 10; ... Je ne vois pas trop a
quoi cela corespond ( le double par exemple, que fait il là tout seul
? )

Encore merci pour votre patience
Avatar
Olivier Thomann
Bon pour l'unité ca fonctionen a merveille ( int res = nombre % 10; )
Mais comment utiliser la meme chose pour extraire la dizaine ou la
centaine ?
Si je ne m'abuse il te suffit de faire le même principe avec le nombre

divisé par 10.
Genre:
86
86 % 10 = 6 (unité)
(86 / 10) = 8
8 % 10 = 8 (dizaine)
etc. pour récupérer les centaintes....
--
Olivier

Avatar
MoxLotus
Oo Bon évidement que sa fonctionne :p ( j'aurais dû y penser ^^ )
Merci les gars !