Текущее время: Чт, июл 03 2025, 08:32

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Функция FLOOR
СообщениеДобавлено: Пт, дек 09 2005, 15:28 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Добрый день.
В цикле обрабатываю таблицу, хочу выводить процент выполнения. Нарисовал код:

DATA: num_lines TYPE I, "Количество записей
curr_line TYPE I, "Текущая запись
percentage TYPE I, "Процент обработанных записей
old_percentage TYPE I. "Процент обработанных записей

curr_line = sy-tabix.
COMPUTE percentage = FLOOR( curr_line / num_lines * 100 ).

IF old_percentage <> percentage.
old_percentage = percentage.
PERFORM gui_text USING 'Обработка продаж' percentage.
ENDIF.

Смотрю, что происходит в отладчике. В таблице 137 строк.
1) Первая строка, percentage = 0 (правильно, ближайшее меньшее целое к 1/137*100 - ноль)
2) Вторая строка percentage=0, хотя 2/137*100=1,46
3) И так для всех строк...

Соответственно, непонятно, как в этом случае отрабатывает FLOOR...
Может еще чего забыл дописать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 09 2005, 15:37 
Гость
IMHO
1) 2 / 137 = 0
2) 0 * 100 = 0
последовательность может имеет значение? но это предположение, особенно при типе данных I.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, дек 09 2005, 15:55 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Не очень понял про последовательность...
Вышел из положения так:
завел поле

DATA: percentage1 TYPE f.

percentage1 = ( curr_line / num_lines ) * 100.

percentage = percentage1.

и далее по тексту...
Не понятно, с чем связано нежелание отрабатывать FLOOR, хотя делал строго по хелпу:(


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, дек 10 2005, 23:36 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, мар 02 2005, 20:19
Сообщения: 133
Откуда: Moscow
А связано с тем, что в 1-ом случае было:
percentage TYPE I, "Процент обработанных записей
........
COMPUTE percentage = FLOOR( curr_line / num_lines * 100 ).

Поэтому для всех строк, кроме последней процент = 0, для последней = 100%


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 12 2005, 03:53 
Гость
все верно, дело вообще не в floor ...
попробуйте посчитать:
data: tt type i.
tt = 24 / 5 * 100.

tt будет равно 500, хотя вроде как должно быть 480 ... расчет то последователен и все промежуточные результаты ложатся в саму переменную ...
так что тебе не надо было ничего придумывать, просто умножение на 100 надо было воткнуть до деления ... т.е. 2 * 100 / 137 ... получается 1 ... правда тогда отпадает нужда во floor, так как значение становится целым ещё внутри скобок ...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 12 2005, 12:36 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Спасибо, теперь понятно. Не учел последовательность вычислений...


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB