salut !
j'aimerais récupérer la partie entière d'un double :
comment faire ?Code:
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
Version imprimable
salut !
j'aimerais récupérer la partie entière d'un double :
comment faire ?Code:
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: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:
1
2 double d=Math.Truncate(y); int I=(int)d;
En fait on peut carrément faire ça :
Code:
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 :roll:
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 :aie:
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:
1
2
3 Math.Ceiling Math.Floor
si le nombre est supérieur à zéro tu prends Math.Floor sinon Math.Ceiling.