Как округлить сумму в швейцарской валюте (франках)

здесь, в швейцарии, наша валюта — франки, а самая маленькая монета — 5 сантимов, что составляет 0,05 франка. Как лучше всего округлить суммы, подлежащие оплате нашими деньгами, с помощью языка программирования ABAP в системе SAP R/3?

Примеры:

" 4.48 should round to 4.50
" 2746.24 should round to 2746.25

person Community    schedule 21.01.2010    source источник
comment
Вы должны опубликовать этот стандартный FM в качестве ответа.   -  person BenV    schedule 07.03.2011


Ответы (2)


REPORT  zwvtest.

PARAMETERS: p_in  TYPE dec11_4,
            p_out TYPE dec11_4.

DATA: l_fraction    TYPE dec11_4,
      l_upper       TYPE dec11_4,
      l_delta_upper TYPE dec11_4,
      l_lower       TYPE dec11_4,
      l_delta_lower TYPE dec11_4.

AT SELECTION-SCREEN.
  l_fraction = FRAC( p_in * 10 ) / 10.
  l_upper = CEIL( l_fraction * 20 ) / 20.
  l_delta_upper = l_upper - l_fraction.
  l_lower = FLOOR( l_fraction * 20 ) / 20.
  l_delta_lower = l_fraction - l_lower.
  IF l_delta_lower < l_delta_upper.
    p_out = p_in - l_delta_lower.
  ELSE.
    p_out = p_in + l_delta_upper.
  ENDIF.

... если вы хотите, чтобы оно было округлено вверх или вниз в зависимости от ближайшего значения.

person vwegert    schedule 22.01.2010
comment
спасибо, а это единственный способ? Я думал, что такая проблема будет распространенной проблемой в мире SAP, и должно быть меньше ручного способа... Я нашел функциональный модуль ROUND, но это не сработало. - person ; 23.01.2010
comment
Если и есть, то я тоже не нашел. :-) - person vwegert; 23.01.2010

похоже, что есть стандартный модуль:

DATA: result TYPE dec11_4.

CALL FUNCTION 'FIMA_NUMERICAL_VALUE_ROUND'    
  EXPORTING
    i_rtype     = space
    i_runit     = '0.05'
    i_value     = '4.48'
  IMPORTING
    e_value_rnd = result.

i_rtype управляет округлением в большую (+), меньшую (-) или коммерческую (пробел).

person Community    schedule 09.03.2011
comment
привет flurin, есть функция от модуля HR? Я нахожу только функции округления для SD и FIMA, как вы пишете. Или какая-то общая функция округления? Я не хочу использовать функцию из другого модуля (и не хочу ее кодировать) :-) Спасибо. - person dotchuZ; 08.03.2013
comment
извините, не знаю модуль HR - person ; 20.03.2013