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);
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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![]()
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
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.
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Partager