convertion double to int -- ATTENTION SUBTILITÉ

convertion double to int -- ATTENTION SUBTILITÉ - Java - Programmation

Marsh Posté le 12-06-2009 à 20:24:16    

Bonjour, je cherche à convertir un double en int,
Mais je ne veux pas faire un
 
double d = 7.54;
int i = (int)d;
 
ou
 
Double d = 7.54;
int i = d.intValue();
 
mon double découle d'une racine carré sur un entier. en fait ce que je cherche à faire c'est de valider si un nombre est un carré parfait. Donc je ne veux pas "caster" en int ce qui arrondie ou tronque le nombre. Je veux lancer un erreur dans le cas ou mon double ne correspond pas à un entier
 
Math.sqrt(9) --> 3.0
Math.sqrt(7) --> 2.6457513110645907
 
donc le premier serait convertie et l'autre lancerais un message d'erreur...
Bref, convertir un double en int seulement et seulement si celui-ci ne détient pas de chiffre après la virgule...

Reply

Marsh Posté le 12-06-2009 à 20:24:16   

Reply

Marsh Posté le 12-06-2009 à 20:42:55    

%1


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-06-2009 à 20:51:41    

Haha, c'est pas fou, j'aime ça, merci!!!

Reply

Marsh Posté le 12-06-2009 à 20:53:46    

Mais j'ai une petite question dans ce cas, on m'a enseigner qu'un double ne sera jamais égale à un entier, cela va être un nombre très près d'un entier sans jamais en être un, donc:
Math.sqrt(9) --> 3.0
serait en fait:
3.0000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
00001
 
Dans ce cas est ce que je peux vraiment faire un modulo 1 dessus? :s

Reply

Marsh Posté le 12-06-2009 à 20:56:15    

Ça semble fonctionner, merci
J'ai l'habitude de programmer en C++ et non en java, il y a plusieurs subtilité entre le java et le C++, je crois que ceci n'aurais pas fonctionner en C++

Reply

Marsh Posté le 12-06-2009 à 21:08:50    

melissad87 a écrit :

Mais j'ai une petite question dans ce cas, on m'a enseigner qu'un double ne sera jamais égale à un entier, cela va être un nombre très près d'un entier sans jamais en être un, donc:
Math.sqrt(9) --> 3.0
serait en fait:
3.0000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
00001
 
Dans ce cas est ce que je peux vraiment faire un modulo 1 dessus? :s


Oui, c'est surtout que sur un double (ou un flottant en général, float ou double) tu ne dois pas utiliser d'égalité, tu dois utiliser un epsilon (tu testes si la différence entre la valeur cherchée et la valeur trouvée est inférieure à un très petit nombre proche de 0).

melissad87 a écrit :

je crois que ceci n'aurais pas fonctionner en C++


parce qu'en C "%" ne fonctionne que pour les entiers. Mais la stdlib contient fmod qui permet potentiellement de le faire (à vérifier, je fais pas de C) (ou de C++)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed