Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme avec arrondissement

5 réponses
Avatar
Dan
Salut
J'ai toujours utiliser format(nombre,"#,00") pour arrondir un nombre, pas
une bonne idée je sais mais ca toujours bien marché jusqu'a maintenant

je suis tombé sur le chiffre 182.825 et la fonction arrondi à 182.82 et non
à 182.83

Alors j'ai essayé cette fonction mais j'ai toujours le meme probleme

Function Arrondi(ByVal Nbre As Double, ByVal Expo As Long) As Double
If Expo < 0 Then
Arrondi = Arrondi(Nbre * 10 ^ Expo, Abs(Expo))
endif
Arrondi = CLng(Nbre * 10 ^ Expo) / 10 ^ Expo
End Function

J'ai remarqué que 182.825 x 10 ^ 2 = 18282.5 clng(18282.5) = 18282 !!!! et
non 18283 ???

Pourquoi il n'arrondi pas au chiffre le plus haut?
Aidez-moi à comprendre !

Merci

5 réponses

Avatar
RaphK34
Bonsoir,
Essaye:

Public Function Arrondi(Montant As Variant, NbDecimal As Integer) As Double
Arrondi = Int(CDec(Montant * (10 ^ NbDecimal) + 0.5)) / (10 ^ NbDecimal)
End Function


--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Dan" a écrit dans le message de news:
ek$2oCn$
| Salut
| J'ai toujours utiliser format(nombre,"#,00") pour arrondir un nombre, pas
| une bonne idée je sais mais ca toujours bien marché jusqu'a maintenant
|
| je suis tombé sur le chiffre 182.825 et la fonction arrondi à 182.82 et
non
| à 182.83
|
| Alors j'ai essayé cette fonction mais j'ai toujours le meme probleme
|
| Function Arrondi(ByVal Nbre As Double, ByVal Expo As Long) As Double
| If Expo < 0 Then
| Arrondi = Arrondi(Nbre * 10 ^ Expo, Abs(Expo))
| endif
| Arrondi = CLng(Nbre * 10 ^ Expo) / 10 ^ Expo
| End Function
|
| J'ai remarqué que 182.825 x 10 ^ 2 = 18282.5 clng(18282.5) = 18282 !!!!
et
| non 18283 ???
|
| Pourquoi il n'arrondi pas au chiffre le plus haut?
| Aidez-moi à comprendre !
|
| Merci
|
|
Avatar
le méruvien
Bonjour,

dans les propriétées du champ, tu met "format"=fixe et "decimale"=2



"Dan" a écrit dans le message de news:
ek$2oCn$
Salut
J'ai toujours utiliser format(nombre,"#,00") pour arrondir un nombre, pas
une bonne idée je sais mais ca toujours bien marché jusqu'a maintenant

je suis tombé sur le chiffre 182.825 et la fonction arrondi à 182.82 et
non
à 182.83

Alors j'ai essayé cette fonction mais j'ai toujours le meme probleme

Function Arrondi(ByVal Nbre As Double, ByVal Expo As Long) As Double
If Expo < 0 Then
Arrondi = Arrondi(Nbre * 10 ^ Expo, Abs(Expo))
endif
Arrondi = CLng(Nbre * 10 ^ Expo) / 10 ^ Expo
End Function

J'ai remarqué que 182.825 x 10 ^ 2 = 18282.5 clng(18282.5) = 18282 !!!!
et
non 18283 ???

Pourquoi il n'arrondi pas au chiffre le plus haut?
Aidez-moi à comprendre !

Merci




Avatar
Père FOURAS
Explication sur l'arrondi :

Le cas du 5 pose problème : il est au plein milieu de l'intervalle. Il a
donc été décidé que l'on devait regarder le chiffre précedent avant de faire
l'arrondi.
Si ce dernier est paire alors on arrondi vers le bas, s'il est impaire on
arrondi vers le haut.

1.05=>1.0, 1.15=>1.2, 1.25=>1.2, 1.35=>1.4, 1.45=>1.4,
1.55=>1.6, 1.65=>1.6, 1.75=>1.8, 1.85=>1.8, 1.95=>2.0

Par contre si tu veux toujours arrondir vers le haut, utilises la fonction
INT.

? int(1.825*100+1)/100
1.83

"Dan" wrote:

Salut
J'ai toujours utiliser format(nombre,"#,00") pour arrondir un nombre, pas
une bonne idée je sais mais ca toujours bien marché jusqu'a maintenant

je suis tombé sur le chiffre 182.825 et la fonction arrondi à 182.82 et non
à 182.83

Alors j'ai essayé cette fonction mais j'ai toujours le meme probleme

Function Arrondi(ByVal Nbre As Double, ByVal Expo As Long) As Double
If Expo < 0 Then
Arrondi = Arrondi(Nbre * 10 ^ Expo, Abs(Expo))
endif
Arrondi = CLng(Nbre * 10 ^ Expo) / 10 ^ Expo
End Function

J'ai remarqué que 182.825 x 10 ^ 2 = 18282.5 clng(18282.5) = 18282 !!!! et
non 18283 ???

Pourquoi il n'arrondi pas au chiffre le plus haut?
Aidez-moi à comprendre !

Merci





Avatar
Dan
Merci à tous pour l'aide !

Finalement c'est Raphk34 qui a trouvé la bonne solution à mon probleme
La partie "clé" de la formule est "Cdec" mais je ne sais pourquoi

182.825 avec cette formule sans Cdec donne 182.82 mais avec Cdec ca donne
182.83
Sans :Arrondi = Int((Montant * (10 ^ NbDecimal) + 0.5)) / (10 ^ NbDecimal)
donne 182.82
Avec :Arrondi = Int(CDec(Montant * (10 ^ NbDecimal) + 0.5)) / (10 ^
NbDecimal) donne 182.83

Sans Cdec , Int(18283) = 18282 et avec int(Cdec(18283)) cela donne 18283
Pourtant il y aucun decimale ?! , assez étrange, mais mon problème est
résolu, c'est l'important !

Merci encore à tous !

"RaphK34" a écrit dans le message de
news:OWi3VVn$
Bonsoir,
Essaye:

Public Function Arrondi(Montant As Variant, NbDecimal As Integer) As
Double

Arrondi = Int(CDec(Montant * (10 ^ NbDecimal) + 0.5)) / (10 ^ NbDecimal)
End Function


--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Dan" a écrit dans le message de news:
ek$2oCn$
| Salut
| J'ai toujours utiliser format(nombre,"#,00") pour arrondir un nombre,
pas

| une bonne idée je sais mais ca toujours bien marché jusqu'a maintenant
|
| je suis tombé sur le chiffre 182.825 et la fonction arrondi à 182.82 et
non
| à 182.83
|
| Alors j'ai essayé cette fonction mais j'ai toujours le meme probleme
|
| Function Arrondi(ByVal Nbre As Double, ByVal Expo As Long) As Double
| If Expo < 0 Then
| Arrondi = Arrondi(Nbre * 10 ^ Expo, Abs(Expo))
| endif
| Arrondi = CLng(Nbre * 10 ^ Expo) / 10 ^ Expo
| End Function
|
| J'ai remarqué que 182.825 x 10 ^ 2 = 18282.5 clng(18282.5) = 18282
!!!!

et
| non 18283 ???
|
| Pourquoi il n'arrondi pas au chiffre le plus haut?
| Aidez-moi à comprendre !
|
| Merci
|
|




Avatar
Jessy Sempere [MVP]
Bonjour

le problème avait été abordé, il était du à la précision avec la
virgule flottante d'access, ou quelque chose dans le genre, une recherche
sur google t'en dirais plus... l'erreur est du au calcul :
(0.5+[nombre]*100)
ce calcul se fait en virgule flottante, il faut donc utiliser la fonction de
Cdec()
pour forcer une conversion binaire exacte...


@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Dan" a écrit dans le message news:
uE20a5v$
Merci à tous pour l'aide !

Finalement c'est Raphk34 qui a trouvé la bonne solution à mon probleme
La partie "clé" de la formule est "Cdec" mais je ne sais pourquoi

182.825 avec cette formule sans Cdec donne 182.82 mais avec Cdec ca donne
182.83
Sans :Arrondi = Int((Montant * (10 ^ NbDecimal) + 0.5)) / (10 ^ NbDecimal)
donne 182.82
Avec :Arrondi = Int(CDec(Montant * (10 ^ NbDecimal) + 0.5)) / (10 ^
NbDecimal) donne 182.83

Sans Cdec , Int(18283) = 18282 et avec int(Cdec(18283)) cela donne 18283
Pourtant il y aucun decimale ?! , assez étrange, mais mon problème est
résolu, c'est l'important !

Merci encore à tous !

"RaphK34" a écrit dans le message de
news:OWi3VVn$
Bonsoir,
Essaye:

Public Function Arrondi(Montant As Variant, NbDecimal As Integer) As
Double

Arrondi = Int(CDec(Montant * (10 ^ NbDecimal) + 0.5)) / (10 ^ NbDecimal)
End Function


--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Dan" a écrit dans le message de news:
ek$2oCn$
| Salut
| J'ai toujours utiliser format(nombre,"#,00") pour arrondir un nombre,
pas

| une bonne idée je sais mais ca toujours bien marché jusqu'a
maintenant


|
| je suis tombé sur le chiffre 182.825 et la fonction arrondi à 182.82
et


non
| à 182.83
|
| Alors j'ai essayé cette fonction mais j'ai toujours le meme probleme
|
| Function Arrondi(ByVal Nbre As Double, ByVal Expo As Long) As Double
| If Expo < 0 Then
| Arrondi = Arrondi(Nbre * 10 ^ Expo, Abs(Expo))
| endif
| Arrondi = CLng(Nbre * 10 ^ Expo) / 10 ^ Expo
| End Function
|
| J'ai remarqué que 182.825 x 10 ^ 2 = 18282.5 clng(18282.5) = 18282
!!!!

et
| non 18283 ???
|
| Pourquoi il n'arrondi pas au chiffre le plus haut?
| Aidez-moi à comprendre !
|
| Merci
|
|