Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Re : Problème d'arrondi (arrondi au chiffre inférieur)
Re…
En multipliant un nombre (non nul) par 1,000000000001 on en augmente légèrement sa valeur absolue. C'est suffisant pour corriger le vice de fabrication de la fonction Round(). Il y a évidemment une limite à l'exercice : les nombres à traiter ne doivent pas être trop grands en valeur absolue.
Exemples :
x = 0,45 ; x * 1,000000000001 = 0,45000000000045
y = 100000000000.45 ; y * 1,000000000001 = 100000000000,55
Dans le premier cas les arrondis à 1, 2, 3 chiffres sont corrects :
0,4 ; 0,45 ; 0,450.
Mais pas dans le second :
100000000000,6 ; 100000000000,55 ; 100000000000,550.
(On attend 100000000000,5 ; 100000000000,45 ; 100000000000,450.)
Re : Problème d'arrondi (arrondi au chiffre inférieur)
Re,
Pour Roger :
Pourquoi ne pas additionner (au lieu de multiplier) un petit reliquat :
1+0.1^9 ou 1+1/9^9
Le nombre de départ n'a plus aucune importance.
Pour Roger :
Pourquoi ne pas additionner (au lieu de multiplier) un petit reliquat :
1+0.1^9 ou 1+1/9^9
Le nombre de départ n'a plus aucune importance.
C'est une voie possible. Mais le champ d'application est beaucoup plus restreint. Voir le classeur joint testant les fonctions suivantes :
VB:
Function hoerwind(x#)
Application.Volatile
hoerwind = Round(1 / 9 ^ 9 + x, 1)
End Function
Function Roger2327(x#)
Application.Volatile
Roger2327 = Round(1.000000000001 * x, 1)
End Function
Re : Problème d'arrondi (arrondi au chiffre inférieur)
Bonjour à tous,
N'ayant pas peur de surenchérir dans le moche (voir mon dernier post) une solution que j'intègre au classeur de Roger et fonctionnant donc sur ces valeurs. Cordialement
KD
Edit : je n'avais pas rafraichi l'écran avant de poster, la fonction de MJ13 est plus élégante, sans aucun doute 🙂
Il est certain que cette solution est la plus correcte, car la fonction d'Excel est correcte. Le problème est que notre ami veut utiliser la fonction d'arrondi de VisualBasic, qui est défectueuse (et que le Bill's Gang ferait bien de nous corriger au lieu de sortir à n'en plus finir des versions plus ou moins bien maquillées du même logiciel).
Re : Problème d'arrondi (arrondi au chiffre inférieur)
Suite…
La solution de KenDev est apparemment toujours correcte. Elle est d'autant plus intéressante qu'on peut, me semble-t-il, la simplifier un peu :
VB:
Function KenDev#(x#) 'Fonction test de KenDev rationalisée.
Dim z%
Application.Volatile 'Facultatif selon l'usage.
z = InStr(1, CStr(x), ",")
If Right(Left(CStr(-x * (z <> 0)), z + 2), 1) = "5" And Len(CStr(x)) > z + 1 Then
KenDev = Int(10 * x - (x > 0)) / 10
Else
KenDev = Round(x, 1)
End If
End Function
J'ai, comme d'habitude, fait d'assez nombreux tests, mais je n'ai évidemment pas épuisé tous les cas. À tester, donc…
Re : Problème d'arrondi (arrondi au chiffre inférieur)
Bonsoir à tous,
@Roger: Merci Roger pour l'euphémisme... 🙄 Et surtout pour le code. J'avais conscience que j'aurai pu l'écrire en moins de lignes mais je n'imaginais pas pouvoir passer de 33 lignes à 7 (dont une facultative). Ce code va probablement m'être très profitable.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD