Текущее время: Вт, июл 01 2025, 01:23

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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