OVH Cloud OVH Cloud

Problemes de calcul pr?cis avec FLASH

2 réponses
Avatar
ZecMan
Bonjour,

Permettez moi de vous exposer un probleme concernant FLASH et la pr?cision
lors de calculs simple.
Pour cela voici un exemple simple :


EXEMPLE 1:

var Prix1:Number = 47.9;
var Prix2:Number = 47;
var Resultat:Number = Prix1-Prix2;
trace(Resultat);


>>0.899999999999999

cela me donne donc comme r?sultat 0.899999999999999 au lieu de 0.9


EXEMPLE 2:

var Prix1:Number = 47.9;
var Prix2:Number = 40;
var Resultat:Number = Prix1-Prix2;
trace(Resultat);

>>7.9

Dans ce 2eme exemple j'obtient cette fois ci le bon resultat de 7.9


Alors ma question est simple : Comment r?gler ce probleme, car je dois
d?velloper une application, me permettant de g?rer de nombreuses sommes (des
prix) et il faut que les calculs soient pr?cis.
Je ne comprends pas pourquoi Macromedia, ne regle pas (ou ne communique pas)
ce qui semble ?tres un "BUG" tr?s embettant pour des applications n?cessitant
une bonne pr?cision.
Peut ?tres pouvez vous m'en dire plus sur ce forum ?

En vous remer?iant par avance.

2 réponses

Avatar
ekameleon
Hello :)

C'est marrant j'avais jamais vu ce genre de bug ? Faut dire que dans
flash tu as des Number et pas des Integer ou des Float ! du coup il peut
y avoir des problèmes de calcul à mon avis... faudrait que je teste en
SSAS pour voir ?

En attendant pour être certain de ton arrondi tu peux utiliser
Math.round mais pour être certain de conserver ton nombre de chiffre
aprés la virgule tu peux faire en gros ce type de code :

function round(n:Number, floatCount:Number):Number {
if (isNaN(n)) throw new Error("IllegalArgumentError : Argument 'n'
must not be 'null' or 'undefined'.") ;
var r:Number = 1 ;
var i:Number = -1 ;
while (++i < floatCount) r *= 10 ;
return Math.round(n*r) / r ;
}

function diff(value1:Number, value2:Number, floatCount:Number) {
return round(value1 - value2, (isNaN(floatCount) ? 1 : floatCount)) ;
}

var p1:Number = 47.9 ;
var p2:Number = 47 ;
var result:Number = diff(p1, p2) ;

trace("result : " + result);

C'est clair qu'en utilisant cette méthode ... c'est un peu lourd ..
faudrait que Macromedia arrange cela :)

Je chercherai demain si il y a une raison précise sur ces genres de
problèmes d'approximation :)

EKA+ :)

Bonjour,

Permettez moi de vous exposer un probleme concernant FLASH et la pr?cision
lors de calculs simple.
Pour cela voici un exemple simple :


EXEMPLE 1:

var Prix1:Number = 47.9;
var Prix2:Number = 47;
var Resultat:Number = Prix1-Prix2;
trace(Resultat);


>>0.899999999999999

cela me donne donc comme r?sultat 0.899999999999999 au lieu de 0.9


EXEMPLE 2:

var Prix1:Number = 47.9;
var Prix2:Number = 40;
var Resultat:Number = Prix1-Prix2;
trace(Resultat);

>>7.9

Dans ce 2eme exemple j'obtient cette fois ci le bon resultat de 7.9


Alors ma question est simple : Comment r?gler ce probleme, car je dois
d?velloper une application, me permettant de g?rer de nombreuses sommes (des
prix) et il faut que les calculs soient pr?cis.
Je ne comprends pas pourquoi Macromedia, ne regle pas (ou ne communique pas)
ce qui semble ?tres un "BUG" tr?s embettant pour des applications n?cessitant
une bonne pr?cision.
Peut ?tres pouvez vous m'en dire plus sur ce forum ?

En vous remer?iant par avance.




Avatar
ZecMan
Merci de ton interet
++