Announcement

Collapse
No announcement yet.

Interbase 6.5 rundet falsch ?

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

  • Interbase 6.5 rundet falsch ?

    Drei Felder einer Tabelle werden multipliziert in einer Stored Procedure. Da es Float-Felder sind werden die Werte per cast( as numeric(15,2))im Select auf 2 Nachkommastellen gerundet vor dem Multiplizieren (damit der Wert 20,450004567 als 20,45 verwendet wird). Soweit so gut. Die Rechnung 1 * 2,5 * 20,45 ergibt als Ergebnis 51,125. Dieses Ergebnis in einer Variablen vom Wert Numeric(15,2) gespeichert ergibt 51,13. Wenn ich mich nicht irre sollte aber laut Rundungsregel 51,12 rauskommen. Gibt es eine Grund dafür bzw. kann ich etwas dagegen tun?

    Gruß Andreas

  • #2
    Hallo Andreas,
    <br><br>
    rundet InterBase hier denn nicht richtig? Die 3. Nachkommastelle ist 5, also wird aufgerundet, daher das Ergebnis 51,13?!
    <br><br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hallo Thomas,

      meine Schulkentnisse sind wahrscheinlich überholt bzw. ich habe es mir falsch gemerkt. Ich war fest der Meinung, dass wenn eine gerade Zahl vor der 5 steht abgerundet wird. Aber nachdem ich nun mal intensiv im WEB gesucht habe, muß ich feststellen es wird immer aufgerundet.

      Gruß Andrea

      Comment


      • #4
        Hallo,

        das ist etwas tückisch. Delphi rundet auch auf die nächste gerade Stelle bei einer 5, wenn man die Rundungsfunktion nutzt. Das nennt sich wohl banker's round.
        Es gibt also beides, wobei hier aufrunden bei 5 gebräuchlicher ist. Ob das andere tatsächlich irgendwo genutzt wird (Amerika?), weiss ich nicht. Ist auch eine sehr merkwürdige Regel, finde ich....
        Also Rundungsroutinen am besten selber schreiben.

        Grüße
        Juli

        Comment


        • #5
          Hallo,

          in der Methode RoundToDecimal in den Systools von Turbopower gibt es die Variable "Bankers". <br>
          True: 5 wird abgerundet und bei False aufgerundet. <br>
          Also hat es etwas mit der Sichtweise des Anwenders zu tun. Muss ich etwas geben, runde ich ab usw.

          Gruß<br>
          Hors

          Comment

          Working...
          X