Текущее время: Чт, мар 28 2024, 19:24

Часовой пояс: 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
Сообщения: 1246
Кажется, если верить курсу 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 часа


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

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


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

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