Petite question concernant les types de variable [Résolu]

Signaler
Messages postés
16
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
21 mai 2008
-
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
-
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

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
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
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Salut,

Voir ici pour les informations....

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
18
Date d'inscription
samedi 7 avril 2007
Statut
Membre
Dernière intervention
27 juillet 2008

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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
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
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
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.

++