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

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


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

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


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

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