Avec JavaScript, le résultat d'un calcul sur des flottants peut sembler
aberrant.
Ainsi, le résultat de :
10.2 - 4.3
retourne
5.8999999999999995
au lieu de
5.9
Je me dis alors qu'une simple calculatrice de poche à trois francs six
sous est bien plus performante... sauf que, en interne, une calculatrice
stocke plus de chiffres qu'elle ne le montre. Elle a en mémoire 16
chiffres (par exemple), mais n'affiche que 14 chiffres... en passant par
un arrondi.
Il suffit donc, pour le JavaScript, de faire quelque chose comme :
function simplifie(v) {
with (Math) {
v=(round(v*pow(10,14)))/pow(10,14);
}
return v;
}
Youpi ! Ça marche impeccable, y'a pas de bug... Quoi que !
Prenons un grand entier décimal.
a=100000000010.2;
b=4.3;
...
Là, du coup, il vaut mieux ne pas utiliser simplifie !!!
c=100000000010.2-4.3+0.000000007;
donne 100000000005.9
et
simplifie(c)
donne 100000000005.89998
Argh !
Il faut donc tenir compte du nombre de chiffres dans la partie entière
pour déterminer le nombre de chiffres dans la partie décimale à prendre
en compte pour l'arrondi. (je ne sais pas si je suis clair, là).
Déterminer le nombre de chiffre dans la partie entière :
Math.ceil( Math.log(c)/Math.log(10) )
On modifie donc la function simplifie()
----------------------------------------------------------------------
function simplifie(v) {
var n;
with (Math) {
n=ceil(log(c)/log(10));
v=(round(v*pow(10,15-n)))/pow(10,15-n);
}
return v;
}
----------------------------------------------------------------------
En fr.comp.lang.javascript message 22 Apr 2007 01:10:33, Olivier Miakinen <om+ a ecrit:
De retour au bureau je regarderai quand même la norme ECMAScript pour voir s'il n'y a pas déjà une fonction d'affichage qui arrondit à N chiffres significatifs
Il y en a, method toFixed, qui est buggy. Lisez s.v.p c.l.j. FAQ 4.6, et, /via/ mon page Web <URL:http://www.merlyn.demon.co.uk/js-round.htm>, js-rndg1.htm#GC
It's a good idea to read the newsgroup c.l.j and its FAQ. See below.
En fr.comp.lang.javascript message <462a99ec@neottia.net> 22 Apr 2007
01:10:33, Olivier Miakinen <om+news@miakinen.net> a ecrit:
De retour au bureau je regarderai quand même la
norme ECMAScript pour voir s'il n'y a pas déjà une fonction d'affichage
qui arrondit à N chiffres significatifs
Il y en a, method toFixed, qui est buggy. Lisez s.v.p c.l.j. FAQ 4.6,
et, /via/ mon page Web <URL:http://www.merlyn.demon.co.uk/js-round.htm>,
js-rndg1.htm#GC
It's a good idea to read the newsgroup c.l.j and its FAQ. See below.
En fr.comp.lang.javascript message 22 Apr 2007 01:10:33, Olivier Miakinen <om+ a ecrit:
De retour au bureau je regarderai quand même la norme ECMAScript pour voir s'il n'y a pas déjà une fonction d'affichage qui arrondit à N chiffres significatifs
Il y en a, method toFixed, qui est buggy. Lisez s.v.p c.l.j. FAQ 4.6, et, /via/ mon page Web <URL:http://www.merlyn.demon.co.uk/js-round.htm>, js-rndg1.htm#GC
It's a good idea to read the newsgroup c.l.j and its FAQ. See below.