Petite question concernant les types de variable

Résolu
hafsa59 Messages postés 16 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 21 mai 2008 - 15 mai 2008 à 16:04
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Derniè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??

Merci pour votre aide

5 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 41
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.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
15 mai 2008 à 16:13
Salut,

Voir ici pour les informations....

A+
Exploreur

 Linux a un noyau, Windows un pépin
0
cs_kimouu Messages postés 18 Date d'inscription samedi 7 avril 2007 Statut Membre Dernière intervention 27 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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 41
15 mai 2008 à 16:17
kimouu > les valeurs que tu donne sont pour VB6, par pour VB.Net !!!!!!!!

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
15 mai 2008 à 16:35
Salut,

Référence MSDN:

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.

++
0