2010-01-21 13 views
1

ici en suisse notre monnaie est le franc et la plus petite pièce est de 5 centimes ce qui fait 0,05 francs. Quel est le meilleur moyen d'arrondir les montants à payer avec notre argent en utilisant le langage de programmation ABAP dans un système SAP R/3?Comment arrondir une somme pour la monnaie suisse (francs) en ABAP

exemples:

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

Vous devez publier cette norme FM en tant que réponse. – BenV

Répondre

1

il semble qu'il y ait un module standard:

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. 

contrôles i_rtype si elle est arrondie (+), vers le bas (-) ou commercial (espace).

+0

salut flurin, existe-t-il une fonction du module RH? Je trouve seulement des fonctions d'arrondi pour SD et FIMA comme vous écrivez. Ou une sorte de fonction d'arrondi générique? Je ne veux pas utiliser une fonction d'un autre module (et ne veux pas le coder) :-) Merci – zyrex

+0

désolé, je ne connais pas le module RH –

1
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. 

... si vous le voulez arrondi vers le haut ou vers le bas selon ce qui est la valeur la plus proche.

+0

merci, mais est-ce le seul moyen? Je pensais que ce genre de problème serait un problème commun dans le monde SAP et il devrait y avoir une façon moins manuelle ... J'ai trouvé le module de fonction ROUND mais cela n'a pas fonctionné. –

+0

S'il y en a un, je ne l'ai pas trouvé non plus. :-) – vwegert

+0

ok, alors je vais aller avec votre solution. ;) –