Précision de nombres après calculs

cs_AudreyV Messages postés 9 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 15 septembre 2005 - 4 juil. 2005 à 11:05
cs_AudreyV Messages postés 9 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 15 septembre 2005 - 4 juil. 2005 à 13:25
Bonjour,

J'aimerais obtenir des résultats avec une précision de 3 chiffres après la virgule. Pour calculer mes résultats, je suis obligée de passer par des compteurs intermédiaires.
Pour la première étape, je travaille avec des nombres précis à 0.001 pour calculer un numérateur et un dénominateur que j'obtiens également à 0.001 près.
Par contre, quand je divise num par den, j'obtiens forcèment des entiers...
Comment faire pour garder la précision ??

Quelqu'un aurait-il une solution svp ?

Merci

11 réponses

KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
4 juil. 2005 à 11:11
Salut !

petite question :
ta variable qui reçoit le calcul est t-elle déclaré en "long" ?
Sinonn essaye de l'afficher directement
msgbox num/den par exemple et voit le résultat...

j'espere t'avoir aidé.

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
4 juil. 2005 à 11:11
Salut !

petite question :
ta variable qui reçoit le calcul est t-elle déclaré en "long" ?
Sinonn essaye de l'afficher directement
msgbox num/den par exemple et voit le résultat...

j'espere t'avoir aidé.

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
4 juil. 2005 à 11:18
salut,si j'ai bien compris,voila
var=Format(nbr, "0.000")
par exemple Format(0.1214546,"0.000") donne 0.121
ciao
0
cs_AudreyV Messages postés 9 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 15 septembre 2005
4 juil. 2005 à 11:22
Hé bien "msgbox num/den" me donne effectivement ce que je souhaiterais en précision et j'ai bien défini mes variables en Long... Mais toujours pas moyen d'obtenir autre chose que des entiers dans les cases désirées... Snif !!!

Aurais-tu aussi une solution à ce pb ?

En tout cas, merci de ta réponse rapide !!
0

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

Posez votre question
KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
4 juil. 2005 à 11:29
oki, tente d'afficher tes variables :
msgbox mavariable
l'idée est de voir si ta variable contient bien la valeur souhaitée ou si C le fait de la placer dans une "case" qui retire les virgules...

Si c'est la variable, c'est trés étrange, fait alors un copie de ton code pour que l'on voit.
Si c'est la mise en "case" lol alors essaye avec un label plutot qu'une textbox. quoique la encore les textbox ne pose pas de souci d'habitude.

Di moi quoi et essaye de nous donner un maxde détails (code par exemple...)
Voila, bon courage,

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
cs_AudreyV Messages postés 9 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 15 septembre 2005
4 juil. 2005 à 11:40
C'est étrange je dirais : quand j'affiche 1 - num/den, j'obtiens la précision voulue avec la valeur correcte (calcul manuel) mais quand j'affiche nash (qui est strictement égal à 1 - num/den), j'obtiens systématique l'entier le plus proche.

Voili le code si jamais tu décéles une erreur ou une subtilité... Ce serait génial !


' Calcul de Qobs

j = i
Do
num_qobs = num_qobs + .Cells(j, 2)
j = j + 1
Loop Until IsEmpty(.Cells(j, 1))

q_obs = .Cells(i - 1, 6).Value / .Cells(i - 1, 2).Value

' Calcul de {Qobs(i) - Qmod(i)}² et {Qobs(i) - Qobsmoy}², numerateur et denominateur de Nash

l = i
Do
m = (.Cells(l, 2).Value - .Cells(l, 4).Value) * (.Cells(l, 2).Value - .Cells(l, 4).Value)
num_nash = num_nash + m
n = (.Cells(l, 2).Value - q_obs) * (.Cells(l, 2).Value - q_obs)
den_nash = den_nash + n
l = l + 1
Loop Until IsEmpty(.Cells(l, 1))

' Calcul de Nash et affectation dans "Crues"

nash = 1 - num_nash / den_nash
.Cells(i, 9).Value = nash
MsgBox (1 - num_nash / den_nash)
MsgBox nash
0
KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
4 juil. 2005 à 11:53
ok donc c'est ta variable qui gere mal les virgules :
tout d'abord assure toi que nas est déclaré en long
dim nash as long
ensuite si sa c'est correct tente un truc du genre :
nash = round(1 - num_nash / den_nash,3)
la fonction round(valeur;nombre) permet d'arrondir a nombre de chiffres aprés la virgule

essaye déja sa ! et tien moi au courant.

Courage ! la fin est proche :-D

KC62

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
4 juil. 2005 à 11:58
et en quoi est défini nash ?

si c'est en Long, c'est normal que le résultat est tronqué en un entier

faudrait le mettre en Currency, en Single ou en Double
ou mettre le résultat directement

.Cells(i, 9).Value = 1 - num_nash / den_nash


Daniel
0
KC62 Messages postés 229 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 juin 2007
4 juil. 2005 à 12:14
Oulalla dsl merci gobillo ché po pk jé fé une fixation sur long...
mille excuse audreyV, jé bloqué sur nimp's


KC62 (Promis demain je dors...)

On a pas toutes les solutions de tous les probleme mais chaque probleme à ses solutions ...
0
cs_AudreyV Messages postés 9 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 15 septembre 2005
4 juil. 2005 à 13:20
Reresnif... Toujours le même résultat... Il m'affiche un joli 1.0000 au lieu de me mettre la valeur exacte en 0.9... Et nash est bien défini en long...

Vois-tu une autre solution pour aider une âme en detresse !!! :-))

AudreyV
0
cs_AudreyV Messages postés 9 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 15 septembre 2005
4 juil. 2005 à 13:25
héhé je viens de voir le post précédent...

Merci à tous !!!
0
Rejoignez-nous