Почему трассировка (123.456 - 123) дает мне 0.456000000000003 во flash as2 - PullRequest
0 голосов
/ 03 сентября 2011

trace (123.456 - 123) // выходное значение 0.456000000000003 !!!!!! Почему это дает мне эту странную ценность? мне нужно, чтобы вывести 0,456 (моя цель - получить дробь)

Ответы [ 3 ]

3 голосов
/ 03 сентября 2011

Так же, как 1/3-е и 1/7-е не могут быть хорошо выражены в десятичной системе счисления (0,33333 ... и 0,142857142857 ... соответственно), некоторые десятичные числа не могут быть хорошо представлены в двоичном виде, что приводит к таким ошибкам.Чтобы решить это, попробуйте это:

var mynum=(123.456 - 123);
mynum=Math.round(mynum*1000)/1000;
trace(mynum);
1 голос
/ 03 сентября 2011

Потому что вы имеете дело с числом с плавающей запятой. вам нужно округлить его:

http://board.flashkit.com/board/showthread.php?t=778701

пройдите по вышеуказанной ссылке (с измененными номерами):

var num:Number = 123.456 - 123;
num *= 1000;
num = Math.round(num);
num /= 1000;
trace(num);
1 голос
/ 03 сентября 2011

Поскольку это число с плавающей запятой, и вы не можете точно представить все числа с плавающей запятой.

Если вам нужна дробь, создайте класс фракции (возможно, один уже встроен в AS, я не делаюзнаю.)

...