Форум 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=203298)

Frankie Wilde 13.09.2013 17:31

Округление чисел
 
Помогите советом, как округлить число до сотых?
Мне нужно округлять 158.265 -> 158.27.

Код AS3:

var number:Number = 158.265;
trace("number:", number); //number: 158.265
number = 100 * number;
trace("number:", number); //number: 15826.499999999998

P.S. Math.round(data * power) / power) не предлагать, не работает.

AlexCooper 13.09.2013 17:35

Псс... есть Math.floor, ннада?

Добавлено через 1 минуту
Из справки
Цитата:

round(val:Number):Number
[статические] Округляет значение параметра val в большую или меньшую сторону до ближайшего целого числа и возвращает это значение.
Цитата:

floor(val:Number):Number
[статические] Возвращает наименьшее значение числа или выражения, заданного параметром val.

Tails 13.09.2013 17:37

Код AS3:

trace("number:", number.toFixed(2));


Frankie Wilde 13.09.2013 17:45

Меня интересует арифметическое округление. Так, чтобы 12.1234 округлялось до 12.12, а 12.3456 – до 12.35.
toFixed() отбрасывает знаки.
Код AS3:

var number:Number = 158.265;
trace("number.toFixed(2):", number.toFixed(2)); //number.toFixed(2): 158.26


spirit2 13.09.2013 17:48

Код AS3:

Math.round(number * 100) * 0.01


Frankie Wilde 13.09.2013 17:49

Код AS3:

Math.round(number * 100) * 0.01: 158.26

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

Tails 13.09.2013 17:55

Ага, и библиотеку для сложения и вычитания.. Хороший способ вам привёл spirit2, чем не устраивает?

spirit2 13.09.2013 18:01

Цитата:

Сообщение от Tails (Сообщение 1146138)
Ага, и библиотеку для сложения и вычитания.. Хороший способ вам привёл spirit2, чем не устраивает?

Он прав. Проверил:
Код AS3:

trace(Math.round(158.265 * 100) * 0.01);
const number:Number = 158.265 * 100;
trace(number);
trace(Math.round(number));
trace(Math.round(15826.5));
 
158.26
15826.499999999998
15826
15827


chamele0n 13.09.2013 18:04

а чем math.round плох ?
Код AS3:

var n:Number = 158.2651;
 
function _round(num:Number, fixed:int) : Number {
        var temp:Number = Math.round(num * Math.pow(10, fixed));       
        return (temp / Math.pow(10, fixed));
}
 
trace(_round(n, 3));


Tails 13.09.2013 18:11

Считайте и округляйте значения изначально на тысячу больше. Пользователю показывайте со сдвигом точки вправо на 2 знака:
Код AS3:

var number:Number = 15826.5;
trace("number:", Math.round(number)*0.01);

Вы хотите показать пользователю цену в рублях и копейках? Считайте всю сумму сразу в копейках. Хотите показать формат времени: часов:минут, считайте сразу в минутах. То-есть, оперируйте наименьшими значениями, для возведения в большую - много сил не нужно.


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

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