Berechnung ohne Nachkommastellen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Berechnung ohne Nachkommastellen

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
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.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Berechnung ohne Nachkommastellen

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
hi!

Einfach das Ergebnis in eine Variable vom Typ I reinschreiben.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Adrian

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Berechnung ohne Nachkommastellen

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Oder DIV 1 rechnen.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Adrian

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Berechnung ohne Nachkommastellen

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Danke

Re: Berechnung ohne Nachkommastellen

Beitrag von black_adept (Top Expert / 4098 / 128 / 941 ) »
a-dead-trousers hat geschrieben:Einfach das Ergebnis in eine Variable vom Typ I reinschreiben.
Nein! Implizite Typkonvertierung rundet.
ralf.wenzel hat geschrieben:Oder DIV 1 rechnen.
SAP-Hilfe zu COMPUTE - dort artih. Operationen hat geschrieben:DIV: Integer portion of the division of the left by the right operand 2
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.

Die gesuchte Funktion wäre gewesen: TRUNC( X )

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Adrian

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Berechnung ohne Nachkommastellen

Beitrag von black_adept (Top Expert / 4098 / 128 / 941 ) »
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.
Jetzt noch mal zur Originalfrage.
Wenn ich mir die Formel so anschaue, frage ich mich wo du eigentlich runden möchtest. TMP_DIGIT weist doch auf eine Ziffer/Stelle hin. Und die ominösen Potenzen von "26" scheinen darauf hinzudeuten dass du einen String in eine Zahl umwandeln möchtest oder umgekehrt. Und all dies arbeitet üblicherweise nicht mit Nachkommastellen - wo sollen die also herkommen. Auch die Operationen Subtrahieren von ganzen Zahlen und Potenzieren von ganzen Zahlen mit natürlichen Exponenten liefern stets ergebnisse im Ganzzahlraum. Das einzige was hier nachkommastellenbehaftet sein könnte ist dann nur noch "TMP_REFERNUMBER". Aber in diesem Fall wäre die ganze Formel Beiwerk welches den wahren Zweck der Frage verschleiert, da man dann auch gleich diese Variable hätte normieren können um sich danach vollständig im Ganzzahlenraum bewegen zu können.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Adrian

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Berechnung ohne Nachkommastellen

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Das ist eine Codierung von einer Shippingnummer ich brauchte das Ergebins ohne nachkommastellen.

Ich brechne das 5 mal und immer das ergebnis des vorherigen ohne Nachkommastellen wird das nächste Digit.

Unten steht jetzt der ganze code.

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.

Re: Berechnung ohne Nachkommastellen

Beitrag von black_adept (Top Expert / 4098 / 128 / 941 ) »
Hallo Adrian,

das geht auch ganz ohne Nachkommastellen:

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Berechnung ohne Nachkommastellen

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Hallo black_adept,

ich versteh deine Programmierung irgendwie nicht aber egal mit meiner Lösung funktioniert es super. Es sind nur positive Zahlen.

Grüße
Adrian

Seite 1 von 1

Vergleichbare Themen

5
Antw.
2961
Views
Nachkommastellen ab der dritten abschneiden.
von Nordlicht » 02.02.2021 09:32 • Verfasst in ABAP® für Anfänger
2
Antw.
1970
Views
Differenz aus Nachkommastellen berechnen
von kbit100 » 11.04.2018 11:55 • Verfasst in ABAP® für Anfänger
2
Antw.
1575
Views
Nachkommastellen bei einfügen in Tabelle
von Andrzej » 07.05.2017 18:31 • Verfasst in ABAP® für Anfänger
1
Antw.
3616
Views
SapScript Nachkommastellen entfernen
von mistermister » 17.01.2008 15:47 • Verfasst in ABAP® Core
0
Antw.
1300
Views

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von edwin 1 / 22
Programm anlegen mit Vorlage
vor 5 Stunden von DeathAndPain 2 / 81
IT0024 Qualifikationen CP-ID
vor 5 Stunden von DeathAndPain 2 / 324
BUSOBJEKT zu CMIS PHIO ermitteln
vor 7 Stunden von snooga87 1 / 58

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von edwin 1 / 22
Programm anlegen mit Vorlage
vor 5 Stunden von DeathAndPain 2 / 81
IT0024 Qualifikationen CP-ID
vor 5 Stunden von DeathAndPain 2 / 324
BUSOBJEKT zu CMIS PHIO ermitteln
vor 7 Stunden von snooga87 1 / 58

Unbeantwortete Forenbeiträge

Regex in where
vor einer Stunde von edwin 1 / 22
BUSOBJEKT zu CMIS PHIO ermitteln
vor 7 Stunden von snooga87 1 / 58
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3234