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 ?
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
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 ; }
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.
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 ;
}
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 ?
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 ; }
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 ?