Announcement

Collapse
No announcement yet.

Runden beim Interbase 5.x

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Runden beim Interbase 5.x

    Hallo,

    ich habe ein Prolem mit dem Runden auf 2 Stellen. (Interbase 5.x)

    SUM(p.Preis/1.16) AS Betrag2, Ausgabe 116.123

    ich habe es auch schon mit

    CAST((p.Preis/1.16) AS NUMERIC (15,2)) AS Betrag2

    versucht.

    Ich weiss es gibt da noch ein Trick. Ich weiss leider nichtmehr wie der geht.

    Danke.

    Tschüs
    Alex

  • #2
    Hallo,

    warum nicht auf dem Server auf Integer Rechnen, und erst bei der Ausgabe durch 100 teilen ? Damit werden alle Rundungsfehler der Variablentypklassen umgangen.

    Gruß Günte

    Comment


    • #3
      Was für ein Datentyp ist denn p.Preis ?

      Gruss
      Karsten Strobe

      Comment


      • #4
        Hallo,

        der Datentype von p.Preis ist NUMERIC. Die Datentypen in der Datenbank können von mir nicht verändern, da die Datenbank bestehend ist und eine anders Programm darauf zugreift.
        Ich schreibe ein Programm mit dem ich bestimmte Daten auslese und als *.csv Datei abspeichere.

        Gruß

        Alex Brodbec

        Comment


        • #5
          Hallo Alex,
          Datentyp NUMERIC ok, aber welche Auflösung (NUMERIC(x,y))

          Comment


          • #6
            Hi Alex,
            <br>
            <br>Floor((SUM(p.Preis/1.16) + 0.005) * 100) / 100 AS Betrag2, Ausgabe 116.12
            <br>
            <br>Floor ist eine externe Procedure. Rundet zum vollen Integer ab.
            Ich habe leider im Moment keinen IB 5 zur Hand, aber du mußt mal im IB Verzeichnis nach einer Datei suchen ib_udf.sql (oder so ähnlich). In dieser Datei steht drin wie man diese Procedure in der IB Console declariert. Da steht irgend was mit "DECLARE EXTERNAL FUNCTION FLOOR ...". Diesen part markieren und in ISQL ausführen.
            Wenn das nicht auf Anhieb funktionieren sollte, weil die entsprechende dll nicht gefunden wird, dann muß man noch eine dll "ib_udf.dll" (oder so; im selben Verzeichnes) in das bin Verzeichnes des IB kopieren.
            <br>
            <br>Gggf mal im Internet nach dem Begriff UDF suchen ggf findest du eine Bibliothek, bei der man das nicht umständlich über floor machen muß sondern einfach mit round(x,y) (in der Art: round(116.123,2) ergibt 116.123).
            <br>
            <br>Bei folgenden Infos bin ich mir nicht sicher, ob das auch mit dem IB 5.x funktioniert:
            <br>Solch eine UDF kann man auch selber programmieren:
            <br><a href="http://entwickler-forum.de/webx?50@@.ee88caf">http://entwickler-forum.de/webx?50@@.ee88caf</a>
            <br>
            <br>Noch ein guter Link hier im Forum zum Thema Runden:
            <br><a href="http://entwickler-forum.de/webx?13@@.ee8512e">http://entwickler-forum.de/webx?13@@.ee8512e</a>
            <br>
            <br>Mehr Infos dazu in
            <br>Interbase Datenbankentwicklung mit Delphi S.247 ff
            <br>ISBN: 3-935042-09-4
            <br>
            <br>mfg
            <br>p

            Comment

            Working...
            X