hafsa59
Messages postés16Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention21 mai 2008
-
15 mai 2008 à 16:04
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 2009
-
15 mai 2008 à 16:35
Bonjour,
J'aimerais savoir quel est le type de variable le plus précis en VB.net concernant les chiffres à virgule. En fait j'ouvre un fichier contenant des valeurs avec 10 chiffres après la virgule. Des variables (de type single) récupèrent les valeurs du fichier, mais elles n'ont pas 10 chiffres après la virgule. Il doit y avoir 3 chiffres après la virgule arrondi par défaut ou par excès, mais du coup tous les calculs qui suivent sont faussés.
En gros quel type de variable permet d'avoir une précision après la virgule??
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 15 mai 2008 à 16:16
En .Net, la précision d'une variable Single est de 1,401298E-45 et ce n'est effectivement qu'une approximation du nombre réel.
Sinon tu peux utiliser le type Double bien plus precis, ou encore le type Decimal mais qui lui est bien plus gourmand en mémoire et bien plus lent.
Le type Decimal est à reserver à des domaines très particulier (finance par exemple) qui necessitent manipulent des très grands nombres et qui ne tolère absolument pas d'arrondi.
cs_kimouu
Messages postés18Date d'inscriptionsamedi 7 avril 2007StatutMembreDernière intervention27 juillet 2008 15 mai 2008 à 16:15
Salut
Type de données |
Taille |
Plage de valeurs |
Exemples |
----
Entier
(Integer),
2 octets,
-32768 à + 32767,
Dim Oiseaux%
Calendrier% = 12,
----
Entier long
,
4 octets,
-2.147.483.648 à
+ 2.147.483.647,
Dim Charge&
Charge& = 35000,
----
Simple précision
et
virgule flottants,
4 octets,
-3.042.823.E38 à
3.402823E38,
Dim Prix!
Prix! = 895.50,
----
Double précision
et
virgule flottants,
8 octets,
-1.79769313486232D3308 à
1.79769313486232D3308,
Dim Pi #
Pi#=3.1415926535,
----
Monnaie
et
(Currency),
8 octets,
,
Dim Dette@
Dette@= 760010010.50,
----
Chaîne
de caractères
(String),
1 octet par caractère,
0 à 65 535 caractères,
Dim Chien$
Chien$ = "Berger allemand",
----
Bolléen
( boolean),
2 octets,
True (Vrai) ou False (Faux),
Dim Drapeau As Boolean
Drapeau = True,
----
Date
,
8 octets,
1 janvier 100 à
31 décembre 9999,
Dim anniversaire As Date
Anniversaire = #3-1-56#,
----
Variant
,
16 octets pour les nombres et 22 octets + 1 octet par caractères pour les chaînes de caractères,
Les plages de tous les autres types,
Dim Prix
Prix = 289.135
Single (single-precision floating-point) codé sur 32 bits
3.4028235E+38 through -1.401298E-45 † for negative values;
1.401298E-45 through 3.4028235E+38 † for positive values
Double (double-precision floating-point) codé sur 64 bits
-1.79769313486231570E+308 through -4.94065645841246544E-324 † for negative values;
4.94065645841246544E-324 through 1.79769313486231570E+308 † for positive values
Decimal codé sur 128 bits
0 through +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) † with no decimal point;
0 through +/-7.9228162514264337593543950335 with 28 places to the right of the decimal;
smallest nonzero number is +/-0.0000000000000000000000000001 (+/-1E-28) †
Un Single n'est effectivement pas très précis, on utilise le plus souvent le type Double pour faire des calcules à virgule flotante. Si j'ai bien compris (j'ai jamais eu besoins de l'utiliser), le type Decimal est encore plus précis, mais ne peut pas stoquer des valeurs aussi grande (ou petite) qu'un Double.
Tu nous parle du nombre de chiffres après la virgule, mais le nombre de chiffre avant la virgule est tout aussi important... mais je pense que le type Double, avec ses 18 chiffres significatifs devrait faire ton affaire.