begin process at 2008 07 04 23:29:30
1 204 994 membres
509 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : arrondir données [ Algorithme / Maths ] (ketchups)

arrondir données le 16/11/2007 08:34:11

ketchups

Hello tous le monde,

J'aurai besoins d'un petit peu d'aide.

Je suis entrant de faire un programme qui fait des calcules et j'aimerai pouvoir arrondir mes données à une décimal. Et donc arrondi de cette manière :

23.565578775

23.5

 

Si quelqu'un aurait une idée ..


Re : arrondir données le 16/11/2007 08:49:48

lolokun
Salut,

Utilises la fonction Round :
Math.Round(tavaleur,1)

Re : arrondir données le 16/11/2007 12:41:03

ketchups
j'ai essayé mais sa ne fonctionne pas...
j'ai oublié de précisier que je fais des calcule dans une feuille excel
donc ma valeur c'est une variable ...

Re : arrondir données le 16/11/2007 13:00:51

jmfmarques
Membre Club
"j'ai oublié de précisier que je fais des calcule dans une feuille excel"

Ah bon ?

Nous n'aurions pas cru
(Thèmes /VB.NET et VB 2005 / Algorithme / Maths / arrondir données )

Alors ?

Re : arrondir données le 16/11/2007 14:14:41

ketchups
pourrais-tu alors m'indiquer la section appropriée ou je pourrais poster mon message?

Re : arrondir données le 16/11/2007 15:13:37

us_30
Membre Club
Cherche pas midi à quatorze heure ! voici le code :

=

Function Arrondi(Nb, ByVal Nb_Chiffre As Integer) As Double
'Arrondi Nb à Nb_Chiffre
If Not IsNumeric(Nb) Then
    Arrondi = Int(Val(Replace(Nb, ",", ".")) * 10 ^ Nb_Chiffre + 0.5) / 10 ^ Nb_Chiffre
Else
    Arrondi = Int(Nb * 10 ^ Nb_Chiffre + 0.5) / 10 ^ Nb_Chiffre
End If
End Function

=

Pour l'utiliser dans le code de ta macro :

=

Sub ess()
MsgBox Arrondi(23.565578775, 1)
End Sub

=

qui renvoi 23,6 (et non 23,5 ! normal on arrondi au plus près)

Amicalement,
Us.

Re : arrondir données le 17/11/2007 12:23:29

JMO
Membre Club


 Bonjour à tous,

Effectivement, Round ou FormatNumber arrondissent.

2 exemples qui renvoient 23.5

MonNombre = 23.56557877

MsgBox Replace(Left(MonNombre,Len(FormatNumber(MonNombre,1))),",",".")

TabNbre = Split(MonNombre,",")
MsgBox TabNbre(0) & "." & Left(TabNbre(1),1)


jean-marc

Re : arrondir données le 17/11/2007 22:17:38

us_30
Membre Club
ben... j'préfère encore ma solution... Quand j'arrondi je préfère que se soit au plus près... (on peut d'ailleurs facilement ma function pour faire un arrondi par défaut ou par excès...)... et pis utiliser des instructions qui utilise des chaines dans un calcul, je trouve que cela est un contre sens...

Amicalement,
Us.

Re : arrondir données le 18/11/2007 08:32:32

JMO
Membre Club


 Bonjour à tous,

Bonjour us_30,
La fonction Round peut s'utiliser différemment:

MsgBox "FormatNumber" &vbTab&       Replace(FormatNumber(MonNombre,1),",",".") &vbCrLf& _
       "Round"        &vbTab&vbTab& Replace(Round(MonNombre,1),",",".")          


 jean-marc

Re : arrondir données le 18/11/2007 11:19:10

us_30
Membre Club
Réponse acceptée !

Bonjour JMO,

Je ne suis pas convaincu par tes solutions... Je détaille le pourquoi.

En premier lieu, FormatNumber renvoi un type String, or si on arrondi un nombre, c'est parce qu'on fait du fait (en principe), donc dans une programmation structurée on déclare le type des variables. Et pour celles destinées aux calculs, on aura un truc du genre :

Dim V as double

OR, on ne pourra faire ensuite V=formatNumber([expression numérique STRING], .......) car il va y avoir une incompatibilité avec le typage... donc on va être obligé d'utiliser une conversion de type avec VAL ou autre CDBL... C'est donc mettre une couche supplémentaire, et tant qu'on peut éviter... ben, j'évite...

Ensuite ROUND... Normalement, cette fonction doit arrondir un nombre numérique, donc la remarque ci-dessus ne tient plus... Oui, c'est vrai. Mais, elle a un BUG !! En effet, l'arrondi de 1.25, à un chiffre donne 1.2... au lieu de 1.3.... par chance !

D'ailleurs, essaye ton code avec 1.25... et tu obtiendra deux résultats différents... dommage...

Ton code :

Sub ess()
monnombre = InputBox("Nombre à arronidr", "Chercher l'erreur", 1.25)
MsgBox "FormatNumber" & vbTab & Replace(FormatNumber(monnombre, 1), ",", ".") & vbCrLf & _
       "Round" & vbTab & Replace(Round(monnombre, 1), ",", ".")
End Sub

=

A la réflexion, je propose une version améliorée de ma fonction "arrondi" :

Function Arrondi(nb, ByVal Nb_Chiffre As Integer, OptionalByVal Sens = 0.5) As Double
'Arrondi Nb à Nb_Chiffre
'Option Sens : 0.5 => au + Près | 0 => Par Défaut | 1 => Par Excès
If Not IsNumeric(nb) Then nb = Val(Replace(nb, ",", "."))
Arrondi = Int(nb * 10 ^ Nb_Chiffre + Sens) / 10 ^ Nb_Chiffre
End Function

Ma fonction a donc les avantages suivants :
- Pas de problème d'arrondi !
- Traite une expression numérique en Variant,
- Possibilité d'arrondir par défaut ou par excès. (ou autre d'ailleurs en regardant "Sens")

Amicalement,
Us.



[Page 1 Page 2]
Classé sous : données, arrondir

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS