Why trace(123.456 - 123) gives me 0.456000000000003 in flash as2
trace(123.456 - 123) //the output is 0.456000000000003!!!!!! Why it gives me this strange value? i need it to 开发者_如何学运维output 0.456 (my aim is to have the fraction)
Just like 1/3rd and 1/7th cannot be expressed well in decimal notation (0.33333... and 0.142857142857... respectively), certain decimal numbers can't be represented well in binary, leading to errors like this. To solve it, try this:
var mynum=(123.456 - 123);
mynum=Math.round(mynum*1000)/1000;
trace(mynum);
Because it's a floating point number and you can't accurately represent all numbers in floating point.
If you need a fraction, make a faction class (maybe one is built into AS already I don't know.)
Because you're dealing with a floating point number. you're going to need to round it up:
http://board.flashkit.com/board/showthread.php?t=778701
exert form the above link (with numbers changed):
var num:Number = 123.456 - 123;
num *= 1000;
num = Math.round(num);
num /= 1000;
trace(num);
精彩评论