Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Adrian
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Adrian
Nein! Implizite Typkonvertierung rundet.a-dead-trousers hat geschrieben:Einfach das Ergebnis in eine Variable vom Typ I reinschreiben.
ralf.wenzel hat geschrieben:Oder DIV 1 rechnen.
Nein! Leider ist die Doku von SAP in meinen Augen hier inkorrekt. DIV liefert üblicherweise ( und ABAP ist da keine Ausnahme) "Div(x) = Kleinste ganze Zahl kleiner als oder gleich x" (Gaussklammer). Für positive Zahlen ist Ralfs Aussage dann auch korrekt - aber für negative stimmt sie nicht. Div(-1.1) = -2. Aber gefragt war nur das Abschneiden der Nachkommastellen.SAP-Hilfe zu COMPUTE - dort artih. Operationen hat geschrieben:DIV: Integer portion of the division of the left by the right operand 2
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Adrian
Jetzt noch mal zur Originalfrage.Adrian hat geschrieben:Hi @ all,
ich möchte gern
TMP_ZAHL = ( TMP_REFERNUMBER - ( TMP_DIGIT1 * ( 26 ** 4 ) ) - ( TMP_DIGIT2 * ( 26 ** 3 ) ) - ( TMP_DIGIT3 * ( 26 ** 2 ) ) - ( TMP_DIGIT4 * 26 ) )
berechnen aber die Nachkommastellen wegwerfen nicht runden.
Grüße Adrian.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Adrian
Code: Alles auswählen.
DO 5 TIMES.
IF SY-INDEX = 1.
TMP_GANZEZAHL = ( TMP_REFERNUMBER / ( 26 ** 4 ) ) DIV 1.
ELSEIF SY-INDEX = 2.
TMP_GANZEZAHL = ( ( TMP_REFERNUMBER - ( TMP_DIGIT1 * ( 26 ** 4 ) ) ) / ( 26 ** 3 ) ) DIV 1.
ELSEIF SY-INDEX = 3.
TMP_GANZEZAHL = ( ( TMP_REFERNUMBER - ( TMP_DIGIT1 * ( 26 ** 4 ) ) - ( TMP_DIGIT2 * ( 26 ** 3 ) ) ) / ( 26 ** 2 ) ) DIV 1.
ELSEIF SY-INDEX = 4.
TMP_GANZEZAHL = ( ( TMP_REFERNUMBER - ( TMP_DIGIT1 * ( 26 ** 4 ) ) - ( TMP_DIGIT2 * ( 26 ** 3 ) ) - ( TMP_DIGIT3 * ( 26 ** 2 ) ) ) / 26 ) DIV 1.
ELSEIF SY-INDEX = 5.
TMP_GANZEZAHL = ( TMP_REFERNUMBER - ( TMP_DIGIT1 * ( 26 ** 4 ) ) - ( TMP_DIGIT2 * ( 26 ** 3 ) ) - ( TMP_DIGIT3 * ( 26 ** 2 ) ) - ( TMP_DIGIT4 * 26 ) ) DIV 1.
CLEAR: TMP_REFERNUMBER.
ENDIF.
IF SY-INDEX = 1.
MOVE TMP_GANZEZAHL TO TMP_DIGIT1.
ELSEIF SY-INDEX = 2.
MOVE TMP_GANZEZAHL TO TMP_DIGIT2.
ELSEIF SY-INDEX = 3.
MOVE TMP_GANZEZAHL TO TMP_DIGIT3.
ELSEIF SY-INDEX = 4.
MOVE TMP_GANZEZAHL TO TMP_DIGIT4.
ELSEIF SY-INDEX = 5.
MOVE TMP_GANZEZAHL TO TMP_DIGIT5.
ENDIF.
CASE TMP_GANZEZAHL.
WHEN 25.
CONCATENATE UPS_SHIPINGNR 'Z' INTO UPS_SHIPINGNR.
WHEN 24.
CONCATENATE UPS_SHIPINGNR 'Y' INTO UPS_SHIPINGNR.
WHEN 23.
CONCATENATE UPS_SHIPINGNR 'X' INTO UPS_SHIPINGNR.
WHEN 22.
CONCATENATE UPS_SHIPINGNR 'W' INTO UPS_SHIPINGNR.
WHEN 21.
CONCATENATE UPS_SHIPINGNR 'V' INTO UPS_SHIPINGNR.
WHEN 20.
CONCATENATE UPS_SHIPINGNR 'T' INTO UPS_SHIPINGNR.
WHEN 19.
CONCATENATE UPS_SHIPINGNR 'S' INTO UPS_SHIPINGNR.
WHEN 18.
CONCATENATE UPS_SHIPINGNR 'R' INTO UPS_SHIPINGNR.
WHEN 17.
CONCATENATE UPS_SHIPINGNR 'Q' INTO UPS_SHIPINGNR.
WHEN 16.
CONCATENATE UPS_SHIPINGNR 'P' INTO UPS_SHIPINGNR.
WHEN 15.
CONCATENATE UPS_SHIPINGNR 'N' INTO UPS_SHIPINGNR.
WHEN 14.
CONCATENATE UPS_SHIPINGNR 'M' INTO UPS_SHIPINGNR.
WHEN 13.
CONCATENATE UPS_SHIPINGNR 'L' INTO UPS_SHIPINGNR.
WHEN 12.
CONCATENATE UPS_SHIPINGNR 'K' INTO UPS_SHIPINGNR.
WHEN 11.
CONCATENATE UPS_SHIPINGNR 'J' INTO UPS_SHIPINGNR.
WHEN 10.
CONCATENATE UPS_SHIPINGNR 'H' INTO UPS_SHIPINGNR.
WHEN 9.
CONCATENATE UPS_SHIPINGNR 'G' INTO UPS_SHIPINGNR.
WHEN 8.
CONCATENATE UPS_SHIPINGNR 'F' INTO UPS_SHIPINGNR.
WHEN 7.
CONCATENATE UPS_SHIPINGNR 'D' INTO UPS_SHIPINGNR.
WHEN 6.
CONCATENATE UPS_SHIPINGNR 'C' INTO UPS_SHIPINGNR.
WHEN 5.
CONCATENATE UPS_SHIPINGNR 'B' INTO UPS_SHIPINGNR.
WHEN 4.
CONCATENATE UPS_SHIPINGNR '9' INTO UPS_SHIPINGNR.
WHEN 3.
CONCATENATE UPS_SHIPINGNR '8' INTO UPS_SHIPINGNR.
WHEN 2.
CONCATENATE UPS_SHIPINGNR '7' INTO UPS_SHIPINGNR.
WHEN 1.
CONCATENATE UPS_SHIPINGNR '4' INTO UPS_SHIPINGNR.
WHEN 0.
CONCATENATE UPS_SHIPINGNR '3' INTO UPS_SHIPINGNR.
ENDCASE.
CLEAR TMP_GANZEZAHL.
ENDDO.
Code: Alles auswählen.
REPORT.
DATA: shippingnr TYPE i,
rest TYPE i,
codierung TYPE string.
shippingnr = 12345678.
WHILE shippingnr <> 0.
rest = shippingnr MOD 26.
CONCATENATE sy-abcde+rest(1) codierung INTO codierung.
WRITE:/ rest,sy-abcde+rest(1).
shippingnr = shippingnr DIV 26.
ENDWHILE.
WRITE:/ codierung.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Adrian