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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 | |
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:
nospampizza.mpl@tiscali.fr en enlevant nospam.
--------------------------------------------
"Dan" <no@spam.net> a écrit dans le message de news:
ek$2oCn$EHA.3908@TK2MSFTNGP12.phx.gbl...
| 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
|
|
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 | |
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
Bonjour,
dans les propriétées du champ, tu met "format"=fixe et "decimale"=2
"Dan" <no@spam.net> a écrit dans le message de news:
ek$2oCn$EHA.3908@TK2MSFTNGP12.phx.gbl...
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 !
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
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.
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
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.
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 !
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.
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
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 | |
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" <nospampizza.mpl@tiscali.fr> a écrit dans le message de
news:OWi3VVn$EHA.2568@TK2MSFTNGP11.phx.gbl...
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:
nospampizza.mpl@tiscali.fr en enlevant nospam.
--------------------------------------------
"Dan" <no@spam.net> a écrit dans le message de news:
ek$2oCn$EHA.3908@TK2MSFTNGP12.phx.gbl...
| 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
|
|
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 | |
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 | |
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
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Dan" <no@spam.net> a écrit dans le message news:
uE20a5v$EHA.2076@TK2MSFTNGP15.phx.gbl...
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" <nospampizza.mpl@tiscali.fr> a écrit dans le message de
news:OWi3VVn$EHA.2568@TK2MSFTNGP11.phx.gbl...
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:
nospampizza.mpl@tiscali.fr en enlevant nospam.
--------------------------------------------
"Dan" <no@spam.net> a écrit dans le message de news:
ek$2oCn$EHA.3908@TK2MSFTNGP12.phx.gbl...
| 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
|
|
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 | |