Announcement

Collapse
No announcement yet.

IBSQLInsert nimmt falschen Float-Wert an

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

  • IBSQLInsert nimmt falschen Float-Wert an

    Hallo,

    ich habe im Code folgende Programmzeile drinstehen, deren Effekt ich nicht so ganz verstehe:

    <PRE>
    IBSQL1.ParamByName('Betrag').AsFloat:= 586162,41
    </PRE>

    In der Firebird-Datenbank wird jedoch der Wert "586162,44" eingetragen (Numeric(12,2)).

    Steppe ich nun in Delphi durch, so zeigt mir die Delphi-IDE die falsche Wertzuweisung "586162.4375" an.

    Weiß jemand Rat ?

    Grüsse,
    Carsten

    Grüsse,
    Carsten

  • #2
    Hallo Carsten,

    ich kann das bei mir reproduzieren.

    Mit AsDouble oder AsCurrency kommt das richtige Ergebnis in der DB an. Offensichtlich scheint es bei der Implementation von "AsFloat" einen Bug zu geben.

    Gruß

    Torste

    Comment


    • #3
      Hallo Torsten,

      hatte mir leider schon am Freitag einen Workaround mit AsString gebastelt. Muß da aber umständlicherweise noch die "," im String durch einen "." ersetzen, damit die ganzzahligen Werte richtig nach Firebird übertragen werden.

      Mit AsDouble und AsCurrency rechnet er nun bei mir auch wieder richtig. Wo liegt der Fehler jetzt genau ? In den IBX-Komponenten 4.52 von Delphi ?

      Ab wann nehme ich denn den Typ "AsDouble" bzw. "AsCurrency"?

      Noch eine andere Frage, die aber etwas Offtopic ist, stellt sich mir für die Int64-Datentyp. Laut Online-Delphi-Hilfe ist der Wertebereich für diesen Datentyp "-263..262". Aber laut meinem Verständnis ist wird dieser Datentyp doch im Zusammenhang mit "LongInteger"-Werten (64 Bit) gesehen, oder ? Deswegen würde ich einen Wertebereich vermuten, der in die Milliarden hineingeht.

      Grüsse,
      Carste

      Comment


      • #4
        Hallo,

        der Fehler scheint auch im "umgekehrten" Fall vorhanden sein. In Firebird ist eine Stored Procedure definiert, die das Betragsfeld (Datentyp "Numeric(12,2)" als Float-Datentyp zurückliefert.

        Die verwendete TIBQuery-Komponente in Delphi verarbeitet das TFloat-Feld jedoch falsch (Rundungsfehler). Bei Rückgabe des Betragsfeldes als "Numeric(12,2)" verarbeitet die Komponente das BCD-Feld korrekt.

        Grüsse,
        Carste

        Comment

        Working...
        X