Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.04.2014, 16:11
Vova324 вне форума Посмотреть профиль Отправить личное сообщение для Vova324 Найти все сообщения от Vova324
  № 1  
Ответить с цитированием
Vova324

Регистрация: Apr 2014
Сообщений: 14
По умолчанию Проблема с округлением чисел

Программа должна рассчитывать значения переменных, и выводить их в виде таблицы, округленными до сотых. Вот код проблемного учатка:
Код AS3:
for(var i:int =1; i<9; i++){
//расчеты
gz2[i] = gz2[i].toFixed(2);
gz3[i] = gz3[i].toFixed(2);
gz4[i] = gz4[i].toFixed(2);
gz6[i] = gz6[i].toFixed(2);
 
root["textfield"+i].text = gz2[i]+" | "+gz3[i]+" | "+gz4[i]+" | "+gz6[i];
}
в этом случае в момент, когда приходит время отображать округленные переменные(я трейснул, что они на самом деле округляются) вылетает ошибка:
TypeError: Error #1010: Термин не определен и не имеет свойств.
at _fla::MainTimeline/raschet()
Я попробовал округлять другим методом:
Код AS3:
for(var i:int =1; i<9; i++){
//расчеты
gz2[i] = Math.round(gz2[i]/0.01)*0.01;
gz3[i] = Math.round(gz3[i]/0.01)*0.01;
gz4[i] = Math.round(gz4[i]/0.01)*0.01;
gz6[i] = Math.round(gz6[i]/0.01)*0.01;
 
root["textfield"+i].text = gz2[i]+" | "+gz3[i]+" | "+gz4[i]+" | "+gz6[i];
в этом случае все прекрасно отображается, но у некоторых отображенных чисел огромные хвосты типа "12.23000000006".
Как округлить числа, чтоб они выводились по-человечески?

Старый 22.04.2014, 16:19
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Можно вот так.

Старый 22.04.2014, 20:24
Vova324 вне форума Посмотреть профиль Отправить личное сообщение для Vova324 Найти все сообщения от Vova324
  № 3  
Ответить с цитированием
Vova324

Регистрация: Apr 2014
Сообщений: 14
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Можно вот так.
Я попробовал так:
Код AS3:
for(var i:int =1; i<9; i++){
//расчеты
gz2[i] = int((gz2[i])*100)/100;
gz3[i] = int((gz3[i])*100)/100;
gz4[i] = int((gz4[i])*100)/100;
gz6[i] = int((gz6[i])*100)/100;
root["textfield"+i].text = gz2[i]+" | "+gz3[i]+" | "+gz4[i]+" | "+gz6[i];
}
и снова ничего не отображается вообще, и показывает:
TypeError: Error #1010: Термин не определен и не имеет свойств.
at _fla::MainTimeline/raschet()

Старый 22.04.2014, 20:35
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 4  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Возможно там где Вызываете метод raschet он не доступен?
У Вас с кодом проблема а не с округлением.

Старый 22.04.2014, 20:47
Vova324 вне форума Посмотреть профиль Отправить личное сообщение для Vova324 Найти все сообщения от Vova324
  № 5  
Ответить с цитированием
Vova324

Регистрация: Apr 2014
Сообщений: 14
raschet - это функция, включающая в себя вот это все:
Код AS3:
for(var i:int =1; i<9; i++){
//расчеты
 
gz2[i] = int((gz2[i])*100)/100;
gz3[i] = int((gz3[i])*100)/100;
gz4[i] = int((gz4[i])*100)/100;
gz6[i] = int((gz6[i])*100)/100;
 
root["textfield"+i].text = gz2[i]+" | "+gz3[i]+" | "+gz4[i]+" | "+gz6[i];
}
и раздел объявления переменных...
а может можно как-то избавится от хвостов из нулей или девяток при использовании Math.round?

Старый 22.04.2014, 20:47
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
А Вы в коде делаете ещё изменения? Просто, если у Вас со вторым кодом из првого поста работает,
то и с этим обязано.

Старый 22.04.2014, 20:52
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 7  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
У вас массив наверное не инициализирован. У меня часто была подобная ошибка только из-за того, что массив не инициализирован.
Код AS3:
gz2 = [];
gz3 = [];
...
__________________
There is no thing in this world that is not simple.

Старый 23.04.2014, 14:38
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Код AS3:
gz2[i] = gz2[i].toFixed(2);
Надеюсь gz2 — это массив, а не вектор, потому что toFixed() возвращает уже не число, а строку.

Код AS3:
gz2[i] = Math.round(gz2[i]/0.01)*0.01;
Я еще могу понять умножение на 0.01 — это типо такая нанооптимизация на разнице выполнений деления и умножения. Но деление на 0.01 вместо умножения на 100 — не поддается.
__________________
Поймай яблоко 2!

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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