la formule =ENT(MOD(A1*100;100)) me donne le même résultat pour A1=10.02
et A1= 10.03:
cellule A1: 10.02 =ENT(MOD(A29*100;100)) donne 2 (correct)
cellule A1: 10.03 =ENT(MOD(A29*100;100)) donne 2 au lieu de 3 (incorrect)
j'utilise ça pour transformer des prix ecrit en chiffres en lettres.
(ça me donne des erreurs de centimes génantes!)
j'ai ce pb avec excel 2003 sur xp, et excel 200 sur windows2000
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
Jean-Claude Arbaut
Le 30/06/05 16:46, dans , « bellou » a écrit :
la formule =ENT(MOD(A1*100;100)) me donne le même résultat pour A1.02 et A1= 10.03:
cellule A1: 10.02 =ENT(MOD(A29*100;100)) donne 2 (correct) cellule A1: 10.03 =ENT(MOD(A29*100;100)) donne 2 au lieu de 3 (incorrect)
Boulette: tu modifie A1 et ta formule utilise A29 :-) Mais le problème est pas là.
j'utilise ça pour transformer des prix ecrit en chiffres en lettres. (ça me donne des erreurs de centimes génantes!) j'ai ce pb avec excel 2003 sur xp, et excel 200 sur windows2000
Cela vient de la façon de calculer du processeur (et donc d'Excel, mais ce n'est pas de sa faute):
Tu trouve C1úUX, C2=VRAI. En fait, B1<3, donc la partie entière vaut bien 2.
Si les calculs étaient exacts, tu aurait bien C1=VRAI, le problème, c'est que les calculs sont faits avec des nombres "flottants", à virgule, et codés en binaire. Or dans ce système, 10.03 n'existe pas. Il est remplacé par un nombre très proche, 10.0299999999999993605115378159098327159881591796875, qui lui est codé exactement dans l'ordinateur (le codage suit le standard IEEE754, il y a des docs sur Internet). Ce nombre approché s'écrit aussi 5646388032815759 * 2^-49, au passage. Bref, tu multiplie par 100, ce qui donne 1002.9999999999998863131622783839702606201171875, le modulo 100 donne 2.9999999999998863131622783839702606201171875, et alors tu es grillé avec ta partie entière.
Seule solution: bien piger comment marche la virgule flottante, car c'est piégeux. Ensuite, su tu veux absolument utiliser des fonctions comme MOD et ENT sans avoir des résultats bizarres, il faut faire tous tes calculs sur des *entiers*. Par exemple, tu compte en centimes, et tu aura 1003 (entier, et exact) à la place de 10.03 (inexact).
Tu peux remarquer que 10.02 n'est pas exact non plus: 10.019999999999999573674358543939888477325439453125, mais coup de chance, quand on multiplie par 100, on obtient 1002, exactement (en raison de l'arrondi lors de la multiplication).
Le 30/06/05 16:46, dans DB5F8E51-F1D4-48E4-92CB-76DE91CE4289@microsoft.com,
« bellou » <bellou@discussions.microsoft.com> a écrit :
la formule =ENT(MOD(A1*100;100)) me donne le même résultat pour A1.02
et A1= 10.03:
cellule A1: 10.02 =ENT(MOD(A29*100;100)) donne 2 (correct)
cellule A1: 10.03 =ENT(MOD(A29*100;100)) donne 2 au lieu de 3 (incorrect)
Boulette: tu modifie A1 et ta formule utilise A29 :-) Mais le problème est
pas là.
j'utilise ça pour transformer des prix ecrit en chiffres en lettres.
(ça me donne des erreurs de centimes génantes!)
j'ai ce pb avec excel 2003 sur xp, et excel 200 sur windows2000
Cela vient de la façon de calculer du processeur (et donc d'Excel, mais ce
n'est pas de sa faute):
Tu trouve C1úUX, C2=VRAI.
En fait, B1<3, donc la partie entière vaut bien 2.
Si les calculs étaient exacts, tu aurait bien C1=VRAI, le problème, c'est
que les calculs sont faits avec des nombres "flottants", à virgule, et codés
en binaire. Or dans ce système, 10.03 n'existe pas. Il est remplacé par un
nombre très proche, 10.0299999999999993605115378159098327159881591796875,
qui lui est codé exactement dans l'ordinateur (le codage suit le standard
IEEE754, il y a des docs sur Internet). Ce nombre approché s'écrit aussi
5646388032815759 * 2^-49, au passage.
Bref, tu multiplie par 100, ce qui donne
1002.9999999999998863131622783839702606201171875, le modulo 100 donne
2.9999999999998863131622783839702606201171875, et alors tu es grillé avec ta
partie entière.
Seule solution: bien piger comment marche la virgule flottante, car c'est
piégeux. Ensuite, su tu veux absolument utiliser des fonctions comme MOD et
ENT sans avoir des résultats bizarres, il faut faire tous tes calculs sur
des *entiers*. Par exemple, tu compte en centimes, et tu aura 1003 (entier,
et exact) à la place de 10.03 (inexact).
Tu peux remarquer que 10.02 n'est pas exact non plus:
10.019999999999999573674358543939888477325439453125,
mais coup de chance, quand on multiplie par 100, on obtient
1002, exactement (en raison de l'arrondi lors de la multiplication).
la formule =ENT(MOD(A1*100;100)) me donne le même résultat pour A1.02 et A1= 10.03:
cellule A1: 10.02 =ENT(MOD(A29*100;100)) donne 2 (correct) cellule A1: 10.03 =ENT(MOD(A29*100;100)) donne 2 au lieu de 3 (incorrect)
Boulette: tu modifie A1 et ta formule utilise A29 :-) Mais le problème est pas là.
j'utilise ça pour transformer des prix ecrit en chiffres en lettres. (ça me donne des erreurs de centimes génantes!) j'ai ce pb avec excel 2003 sur xp, et excel 200 sur windows2000
Cela vient de la façon de calculer du processeur (et donc d'Excel, mais ce n'est pas de sa faute):
Tu trouve C1úUX, C2=VRAI. En fait, B1<3, donc la partie entière vaut bien 2.
Si les calculs étaient exacts, tu aurait bien C1=VRAI, le problème, c'est que les calculs sont faits avec des nombres "flottants", à virgule, et codés en binaire. Or dans ce système, 10.03 n'existe pas. Il est remplacé par un nombre très proche, 10.0299999999999993605115378159098327159881591796875, qui lui est codé exactement dans l'ordinateur (le codage suit le standard IEEE754, il y a des docs sur Internet). Ce nombre approché s'écrit aussi 5646388032815759 * 2^-49, au passage. Bref, tu multiplie par 100, ce qui donne 1002.9999999999998863131622783839702606201171875, le modulo 100 donne 2.9999999999998863131622783839702606201171875, et alors tu es grillé avec ta partie entière.
Seule solution: bien piger comment marche la virgule flottante, car c'est piégeux. Ensuite, su tu veux absolument utiliser des fonctions comme MOD et ENT sans avoir des résultats bizarres, il faut faire tous tes calculs sur des *entiers*. Par exemple, tu compte en centimes, et tu aura 1003 (entier, et exact) à la place de 10.03 (inexact).
Tu peux remarquer que 10.02 n'est pas exact non plus: 10.019999999999999573674358543939888477325439453125, mais coup de chance, quand on multiplie par 100, on obtient 1002, exactement (en raison de l'arrondi lors de la multiplication).