salut !
j'aimerais récupérer la partie entière d'un double :
comment faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int x; double y=-3.3325988; //j'aimerais mettre la partie entière de y dans x c'est a dire x=-3
salut !
j'aimerais récupérer la partie entière d'un double :
comment faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int x; double y=-3.3325988; //j'aimerais mettre la partie entière de y dans x c'est a dire x=-3
Code : Sélectionner tout - Visualiser dans une fenêtre à part x = (int)Math.Truncate(y);
salut !
je l'ai essayé mais pour des valeurs négatives, elle retourne 0
et pour y=8 elle retourne 7 ????? c'est bizarre non !
Problème de casting je pense, essaye :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 double d=Math.Truncate(y); int I=(int)d;
En fait on peut carrément faire ça :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 double y = -3.3325988; int x = (int)y;
Je pense que tu a raison mais tu est certain qu'il n'y a pas parfois des problèmes d'arrondi
Style 3.99999 = 4 ?
Bah en même temps 3.9999... c'est bien égal à 4
Sinon les erreurs d'arrondi calamiteux j'en ai surtout vu avec les float, pas les double, mais vu qu'il y a toujours des histoires de conversions à par utiliser lavaleur.ToString et splitter sur le séparateur je ne sais pas s'il y a une méthode arondi proof ...
Ah ?? Si c'est une valeur entre -1 et 0, c'est logique, mais sinon ça renvoie bien la partie entière... j'ai fait le test, Math.Truncate(-2.5) renvoie bien -2
Ca pourrait s'expliquer par un problème de précision : un double ne permet pas toujours d'encoder la valeur exacte d'un nombre, donc 8 pourrait être encodé en un truc du genre 7.999996879...
Cela dit j'ai fait le test et chez moi ça renvoie bien 8
Euh... c'est pareil
Ben c'est nouveau ça
Si tu fais des calculs de trajectoire pour une fusée (par exemple), tu ne peux pas te permettre de considérer que c'est égal
Euh... c'est pareil
A priori oui et il semble bien que oui dans ce cas ci
Mais j'ai déja souvent eu des problemes de casting de ce genre dans des expressions un peu complexe que j'ai été obligé de contourner par l'usage d'une variable temporaire
Tu as déjà entendu parler des séries entières ? Tu peux écrire 1 sous la forme d'une série entière (somme de 0 à l'infini) et ça va te donner 0,9 + 0,09 + ... = 0,999... = 1
D'ailleurs il y a plein de manières de l'écrire cf. http://en.wikipedia.org/wiki/0.999...
Donc oui, 3.99 != 4 mais 3.999... = 4
Tout à fait d'accord avec vous les gars, mais si je peux me permettre,
les fonctions suivantes sont là pour ça, non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Math.Ceiling Math.Floor
si le nombre est supérieur à zéro tu prends Math.Floor sinon Math.Ceiling.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager