SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Преобразование типов p vs f



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
err
Участник
Участник



Joined: 11 Jan 2013
Posts: 3

PostPosted: Fri Jan 11, 2013 2:59 pm    Post subject: Преобразование типов p vs f Reply with quote

Столкнулся с след. ситуацией. При передаче из типа в тип, можно получить разные данные.

Но нигде не могу найти описание этого момента.

Пример:
Code:

DATA:
 l_value1 TYPE p DECIMALS 5 value '1.755',
 l_value2 TYPE f value '1.755',

 l_result1 TYPE p DECIMALS 2,
 l_result2 TYPE p DECIMALS 2.

 l_result1 = l_value1. "результат 1.76
 l_result2 = l_value2. "результат 1.75


Может кто то подсказать ссылки в help'e чтобы они объясняли, что это нормальное поведение системы... что в одном случаем происходит round а в другом trunc.


Last edited by err on Tue Jan 15, 2013 5:00 pm; edited 1 time in total
Back to top
View user's profile Send private message
Кодер
Участник
Участник



Joined: 11 Apr 2012
Posts: 27

PostPosted: Fri Jan 11, 2013 4:48 pm    Post subject: Reply with quote

Посмотрите курс BC402 там подробно расписывается что и как конвертируется
А еще, можно почитать вот это
Back to top
View user's profile Send private message
Shvetz
Специалист
Специалист



Joined: 05 Oct 2007
Posts: 53

PostPosted: Mon Jan 14, 2013 1:30 pm    Post subject: Reply with quote

Нет там trunc. Везде идет round.
Напишите WRITE l_value2 для наглядности.

Для понимания float читайте курс, который вам посоветовали. А международный совет - вообще float не используйте. Вроде уже с NW 7.01 SAP сделал новые float типы, например, DECFLOAT34, которые себя нормально ведут и не требуют заведомого определения длины.
Back to top
View user's profile Send private message
err
Участник
Участник



Joined: 11 Jan 2013
Posts: 3

PostPosted: Mon Jan 28, 2013 1:33 pm    Post subject: Reply with quote

Курс почитал... особенно порядовала строка

Внимание: Для вычислений в арифметике с плавающей запятой
используются операции с плавающей запятой соответствующих
процессоров. Поскольку алгоритмы выполняются над двоичными
числами, могут возникать погрешности. Степень и эффект таких
погрешностей не поддаются оценке.

По поводу round\trunc тоже разобрался... round правда, странный ИМХО.

l_value1 TYPE p DECIMALS 5 value '1.755'
0.0 1.8
0.00 1.76
0.000 1.755
0.0000 1.7550

l_value2 TYPE f value '1.755'
0.0 1.8
0.00 1.75
0.000 1.755
0.0000 1.7550

получается, что округление, делается с учетом размерности приемника + 1.
И при float 1,755 которая во представляется внутри как 0.7549999999999999E+00 при преобразовании к 0.00 преобразуют по факту 1.754, а не 1.755
Back to top
View user's profile Send private message
Armann
Модератор
Модератор



Joined: 01 Jan 2008
Posts: 422
Location: Moscow

PostPosted: Mon Jan 28, 2013 2:09 pm    Post subject: Reply with quote

err wrote:
Курс почитал... особенно порядовала строка

Внимание: Для вычислений в арифметике с плавающей запятой
используются операции с плавающей запятой соответствующих
процессоров. Поскольку алгоритмы выполняются над двоичными
числами, могут возникать погрешности. Степень и эффект таких
погрешностей не поддаются оценке.

Вы не подумайте, это фича не только абапа, а арифметики с плавающей запятой вообще
Back to top
View user's profile Send private message Blog
err
Участник
Участник



Joined: 11 Jan 2013
Posts: 3

PostPosted: Thu Jan 31, 2013 1:11 pm    Post subject: Reply with quote

Согласен.

Я сообственно, отписал, из-за специфичного алгоритма округления. Вдруг кому то поможет...
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.