Текущее время: Вс, июл 27 2025, 19:03

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 08:45 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 16 2010, 14:04
Сообщения: 84
Откуда: Нижнекамск
Пол: Мужской
Помогите с округлением. Нужно округлять четыре знака после запятой до двух знаков.
Сделал на примере ROUND все хорошо кроме одного но.
По задаче требуется чтобы если была третий знак после запятой был 5 округлял в меньшую сторону.
Т.Е.
Code:
Число до округления:
123.1256
После округления как надо:
123.12
Что делает роунд:
123.13


Кусок округления.
Code:
    CALL FUNCTION 'ROUND'
    EXPORTING
      DECIMALS            = 2
      INPUT               = gt_rpmsm-menge
      SIGN                = 'X'
IMPORTING
      OUTPUT              = wa_menge
* EXCEPTIONS
*   INPUT_INVALID       = 1
*   OVERFLOW            = 2
*   TYPE_INVALID        = 3
*   OTHERS              = 4
      .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    gt_rpmsm-menge = wa_menge.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 09:35 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
floor?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 09:41 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 16 2010, 14:04
Сообщения: 84
Откуда: Нижнекамск
Пол: Мужской
Он же вроде округляет до целого?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 09:47 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
SIGN = '-'


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 09:48 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Цитата:
SPACE : no rounding (input = output)
'+' : round up
'-' : round down
'X' : commercial rounding

Code:
    CASE iv_sign.
      WHEN '+'.
        cv_input = CEIL( cv_input / lv_10_d ) * lv_10_d.
      WHEN '-'.
        cv_input = FLOOR( cv_input / lv_10_d ) * lv_10_d.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 09:49 
Специалист
Специалист

Зарегистрирован:
Пт, окт 20 2006, 16:39
Сообщения: 230
insaf121 написал:
Он же вроде округляет до целого?

* 100 потом / 100 ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 09:55 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
demst написал(а):
insaf121 написал:
Он же вроде округляет до целого?

* 100 потом / 100 ?

Тогда уж лучше использовать frac для выделения дробной части. :wink:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 10:03 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Можно вычесть из числа 0,001 и далее тем же round округлять


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 10:07 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 16 2010, 14:04
Сообщения: 84
Откуда: Нижнекамск
Пол: Мужской
Понятно можно использовать.
Не могу придумать как узнать 3 число после запятой. 5 оно или больше?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 10:20 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 16 2010, 14:04
Сообщения: 84
Откуда: Нижнекамск
Пол: Мужской
Решил так тупое решение( просо нужно срочно.

Code:
DATA wa_menge TYPE p DECIMALS 2. "Для подсчета округления Нуриев И.И.
DATA ga_menge(18) TYPE C.
DATA zXy(2) TYPE C.


Code:
   ga_menge = gt_rpmsm-menge.

      ga_menge = FRAC( ga_menge ).
      CONCATENATE ga_menge+16(2)  '' INTO zXy.

      IF zXy = 5.
        gt_rpmsm-menge = FLOOR( gt_rpmsm-menge * 100 ) / 100.
      ELSE.
        CALL FUNCTION 'ROUND'
        EXPORTING
          DECIMALS            = 2
          INPUT               = gt_rpmsm-menge
          SIGN                = 'X'
        IMPORTING
          OUTPUT              = wa_menge
* EXCEPTIONS
*   INPUT_INVALID       = 1
*   OVERFLOW            = 2
*   TYPE_INVALID        = 3
*   OTHERS              = 4
          .
        IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

        gt_rpmsm-menge = wa_menge.
      ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 11:50 
Начинающий
Начинающий

Зарегистрирован:
Пт, июн 10 2011, 11:15
Сообщения: 9
DATA: lv_p1 TYPE p LENGTH 13 DECIMALS 4 VALUE '4123.1256'.
DATA: lv_p2 TYPE p LENGTH 13 DECIMALS 2.

lv_p2 = lv_p1.

IF lv_p2 > lv_p1.
SUBTRACT '0.01' FROM lv_p2. "Убираем округление в большую сторону
ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 12:05 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Lafanian написал(а):
DATA: lv_p1 TYPE p LENGTH 13 DECIMALS 4 VALUE '4123.1256'.
DATA: lv_p2 TYPE p LENGTH 13 DECIMALS 2.

lv_p2 = lv_p1.

IF lv_p2 > lv_p1.
SUBTRACT '0.01' FROM lv_p2. "Убираем округление в большую сторону
ENDIF.

Неправильно. Например, для 3.1266 результат будет 3,12, а должно быть 3,13.
Вот так вроде верно
lv_p2 = lv_p1 - '0.001'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июн 10 2011, 12:17 
Начинающий
Начинающий

Зарегистрирован:
Пт, июн 10 2011, 11:15
Сообщения: 9
Я прислал просто пример с убиранием округления, если нужно только для 0.05 - это вырожденный случай, т.к. нужно понять относится ли 0.049 и 0.059 к нему или нет.

DATA: lv_p1 TYPE p LENGTH 13 DECIMALS 4 VALUE '4123.1256'.
DATA: lv_p2 TYPE p LENGTH 13 DECIMALS 2.

lv_p2 = lv_p1.

"Если нужен вырожденный случай, когда 3-я цифра после запятой = 5
DATA: lv_str1 TYPE string.
DATA: lv_str2 TYPE string.
lv_str1 = lv_p1.
SPLIT lv_str1 AT '.' INTO lv_str1 lv_str2.
IF lv_str2+2(1) = '5' AND lv_p2 > lv_p1.
SUBTRACT '0.01' FROM lv_p2. "Убираем округление в большую сторону
ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с округление.
СообщениеДобавлено: Пт, июл 08 2011, 23:07 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Кстати, в этой истории еще надо обратить внимание на включено ли 'fixed point arithmetics'.

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


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

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


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

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


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

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