Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Неправильный подсчёт суммы (http://www.flasher.ru/forum/showthread.php?t=128284)

ZEMI 04.08.2009 05:30

Неправильный подсчёт суммы
 
Недавно начал изучать ActionScript 3 и встретился с простой проблемой. Пытаюсь вывести сумму:
Код:

trace(13.2-0.4);
Выдаёт результат:
// 12.799999999999999
Притом, что:
Код:

trace(13.2-0.1);
cчитает верно:
// 13.1
Не могу проследить закономерность, когда считает верно, а когда сбивается и выдаёт период.
Почему так происходит и как избежать? Или придется постоянно округлять?

AL.exe 04.08.2009 05:42

Код AS3:

trace((132-4)/10);


ZEMI 04.08.2009 05:49

ну, это я для примера написал. У меня-то в коде переменные и хотелось бы, чтобы все они считались правильно вне зависимости от значения :) Конечно, можно умножать всё на 100 (переменные все до двух знаков после запятой), отнимать и потом делить на 100, но это только как вариант :)

Добавлено через 2 часа 18 минут
Кажется, нашёл ответ на свой вопрос в книге "Сборник рецептов"
4.3. Округление чисел

ZEMI 10.08.2009 04:24

И всё-таки я опять запутался.
Код AS3:

trace(Math.round(10.2 / .01) * .01)
//10.200000000000001

И что поделать, если метод округления не действует?
Как округлить число по нормальному до двух символов после запятой?
Может, как-нибудь можно вывести число с точностью до сотых, не округляя само число?

etc 10.08.2009 07:37

Не надо работать с плавающими запятыми просто.
Код AS3:

trace(Math.round(10.2 * 10) / 10);


Яски 10.08.2009 10:49

Не все десятичные числа можно представить в машинном виде. Для вывода используйте number.toFixed() или number.toPrecision().


Часовой пояс GMT +4, время: 06:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.