Текущее время: Ср, июл 23 2025, 03:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Глюк в ABAP-е
СообщениеДобавлено: Чт, ноя 24 2016, 10:17 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Code:
REPORT ztest_round2.

DATA: ism01    TYPE afru-ism01.    " P(7) DECIMALS 3
DATA: ism01x   TYPE afru-ism01.    " P(7) DECIMALS 3
DATA: kbeasoll TYPE kbed-kbeasoll. " F(8)

ism01    = '20.920'.
ism01x   = '1.760'.
kbeasoll = '2.2680000000000000E+01'.

kbeasoll = round( val = kbeasoll dec = 3 ).

IF ( ism01 + ism01x ) > kbeasoll.
  WRITE: / 'Я здесь 1'.
ELSE.
  WRITE: / 'Я тут 1'.
ENDIF.

* Выводится 'Я здесь 1'

DATA: ism01y   TYPE afru-ism01.    " P(7) DECIMALS 3

ism01y = ism01 + ism01x.
IF ism01y > kbeasoll.
  WRITE: / 'Я здесь 2'.
ELSE.
  WRITE: / 'Я тут 2'.
ENDIF.

* Выводится 'Я тут 2'

Я в шоке

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюк в ABAP-е
СообщениеДобавлено: Чт, ноя 24 2016, 11:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
Кажется, если верить курсу BC402, это не бага, это фича. Смотрите раздел курса Mixed Arithmetic Expressions.
Как я понимаю, за счет того что в if участвует число типа f, то и вычисления будут идти по правилам f, а значит - с погрешностью округления. Во втором случае просто сравнение p и f.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюк в ABAP-е
СообщениеДобавлено: Чт, ноя 24 2016, 14:17 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
во втором случае тоже должно к F приводиться,
язык который сравнивает разные типы не имеет будущего

в первом случае почему-то сумма получилась больше ,
скорее всего он по отдельности переводит p(7,3) в F перед сложением,
и чтобы как обычно не получилось например 0,199999999 f из 0,12 p(7,3)
он добавляет веществ "эпсилон",
сумма этих 2 поправок округл объясняет первый случай


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюк в ABAP-е
СообщениеДобавлено: Ср, ноя 30 2016, 11:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
trop написал(а):
язык который сравнивает разные типы не имеет будущего

Скорее "программист который сравнивает разные типы не имеет будущего" :mrgreen:

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


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

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


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

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


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

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