Précision de nombres après calculs

Signaler
Messages postés
9
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2005
-
Messages postés
9
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2005
-
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

Messages postés
229
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 juin 2007

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 ...
Messages postés
229
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 juin 2007

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 ...
Messages postés
586
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
13 février 2008
2
salut,si j'ai bien compris,voila
var=Format(nbr, "0.000")
par exemple Format(0.1214546,"0.000") donne 0.121
ciao
Messages postés
9
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2005

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 !!
Messages postés
229
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 juin 2007

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 ...
Messages postés
9
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2005

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
Messages postés
229
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 juin 2007

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 ...
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
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
Messages postés
229
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 juin 2007

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 ...
Messages postés
9
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2005

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
Messages postés
9
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
15 septembre 2005

héhé je viens de voir le post précédent...

Merci à tous !!!