Bonjour,
Quand je fait l'une de ces conversions:
J'obtiens comme valeur = 5.2000000000000002Code:
1
2
3
4 ctype("5,2",Double) cdbl("5,2") convert.ToDouble("5,20")
JE ne comprend pas pourquoi...
Quelqu'un aurait-il une idée ?
MErci
Sylo
Version imprimable
Bonjour,
Quand je fait l'une de ces conversions:
J'obtiens comme valeur = 5.2000000000000002Code:
1
2
3
4 ctype("5,2",Double) cdbl("5,2") convert.ToDouble("5,20")
JE ne comprend pas pourquoi...
Quelqu'un aurait-il une idée ?
MErci
Sylo
C'est parce que le type Double ne permet pas toujours de représenter des valeurs décimales exactes. La représentation interne est en base 2, et non en base 10. Or la valeur 5.2 n'a pas de représentation exacte en binaire, donc c'est "arrondi" à la valeur exacte binaire la plus proche, qui n'est pas exactement égale à 5.2.
Voir cet article pour plus de détails : http://csharpindepth.com/Articles/Ge...tingPoint.aspx
(en anglais)
Si tu as besoin que la valeur soit exacte, utilise le type Decimal à la place de Double. C'est un peu moins performant pour les calculs, mais c'est ce qu'il faut utiliser quand la valeur doit absolument être exacte (calculs financiers par exemple). Double est approprié quand l'exactitude est moins importante, par exemple pour des grandeurs physiques dont la mesure n'est de toute façon pas exacte.
ok super, je passe tout en decimal
Sylo