Fonction d'arrondi qui marche?

cs_SYL666 Messages postés 25 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 juillet 2005 - 20 nov. 2003 à 17:06
kellnthi Messages postés 1 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 25 juillet 2005 - 25 juil. 2005 à 09:36
Bonjour
Les petit rigolos de chez Microsoft nous ont pondu une fonction round buggé. enfin, en tout cas en ce qui concerne ma version de VB.
en effet :
Round(0.135, 2) donne 0.14
mais:
Round(0.125, 2) donne 0.12
cherchez l'erreur (pour ce qui ne l'aurai pas vu, 0.125 aurai du etre arrondi au superieur, comme 0.135)
il se plantera aussi pour 0.145,0.165,0.185.

donc je suis a la recherche d'une fonction ou au moins d'indice qui me permettrai de faire une fonction qui:
-Marche dans tout les cas de figure
-permette d'arrondir au dessus de 0 (ex: a 1000 pres)
-permette aussi d'arrondir a 5 pres (ex: a 0.5 ou 50 pres)

Merci et bonne fin de journee

syl

5 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 nov. 2003 à 18:01
je t'ai une fonction qui arrondi par default, si tu veux...

Private Sub Form_Load()
    MsgBox Round(0.125, 2), Title:="Round 0.125 ; 2"
    MsgBox ReyRound(0.125, 2), Title:="ReyRound 0.125 ; 2"
    MsgBox Round(0.135, 2), Title:="Round 0.135 ; 2"
    MsgBox ReyRound(0.135, 2), Title:="ReyRound 0.135 ; 2"
End Sub

Public Function ReyRound(Value As Double, Size As Integer) As Double
    Dim Factor As Long
    Factor = Val("1" & String(Size, "0"))
    ReyRound = Val(Value * Factor) / Factor
End Function


By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 nov. 2003 à 18:03
la fonction de chez Crosoft n'est surement pas buggée, mais elle doit se baser sur des imprecisions mathematiques, de dedales, de virgules flottantes.....

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
cs_SYL666 Messages postés 25 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 juillet 2005
20 nov. 2003 à 18:27
Perdu, mais bien tenté
en effet, les regles mathematiques exigent que qu'un nombre soit arrondi au supérieur des que le chiffre suivant est suppérieur ou egale a 5, a l'inferieur sinon.
ainsi, 0.125 DOIT etre arrondi a 0.13 . ta fonction me donne 0.12. et ne marche donc pas tres bien.

Pour en revenir a la fonction de Microsoft, d'apres moi, une fonction bugge une fonction qui ne renvoie pas toujours un resultat correct. La fonction round correspond a cette definition donc elle est buggee, ou alors je me trompe dans la definition.

@+
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 nov. 2003 à 02:17
ma fonction fonctionne : elle arrondi par defaut !!

voila une version corrigée :

Public Function ReyRound(Value As Double, Size As Integer) As Double
    Dim Factor As Long
    Factor = Val("1" & String(Size, "0"))
   
    Dim Unit As Double
    Unit = Val("0." & String(Size - 1, "0") & "1")
    
    Dim Resultat As Double
    Resultat = (Val(Value * Factor) / Factor)
    
    If CDbl(Resultat & "5") <= Value Then
        ReyRound = Resultat + Unit
    Else
        ReyRound = Resultat
    End If
End Function

Private Sub Form_Load()
MsgBox Round(0.125, 2), Title:="Round 0.125 ; 2"
MsgBox ReyRound(0.125, 2), Title:="ReyRound 0.125 ; 2"
MsgBox Round(0.124, 2), Title:="Round 0.124 ; 2"
MsgBox ReyRound(0.124, 2), Title:="ReyRound 0.124 ; 2"
End
End Sub


By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0

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

Posez votre question
kellnthi Messages postés 1 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 25 juillet 2005
25 juil. 2005 à 09:36
bonjour à tous,

j'ai également rencontré le problème. En fait la fonction Round arrondit mal les chiffres pairs.

Exemple, Round(4.335,2) donnera bien 4.34 mais Round(4.325) donnera 4.32 au lieu de 4.33.



En clair, il vaut mieux utiliser une fonction écrite à la main :)
0
Rejoignez-nous