Announcement

Collapse
No announcement yet.

Interbase / ftFloat

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

  • Interbase / ftFloat

    Hallo,
    <br>
    <br>Es wird eine Tabelle mittels BDE erstellt inkl. Feld StSatz:
    <br>FieldDefs.Add('StSatz', ftFloat, 0, False);
    <br>
    <br>Speichere ich nun den Wert 0.16 in diesem Feld, so wird 0.16 abgespeichert.
    <br>Speichere ich nun den Wert 0.07 in diesem Feld, so wird 0.0700000000000001 abgespeichert.
    <br>
    <br>Weiß jemand Rat?
    <br>
    <br>Danke!
    <br>
    <br>mfg
    <br>PS

  • #2
    Hallo,

    getreu dem Motto "Fließkommazahlen nimmt man zum Schätzen, Ganzzahlen zum Messen" ist eine Tabellenspalte vom Typ FLOAT nicht geeignet, exakte Werte zu speichern. Das ist kein InterBase-Bug, sondern in allen SQL-Datenbanken so (weil diese Rundungsumgenauigkeiten auch der SQL-Standard so vorsieht). Wer exakte Ergebnisse benötigt, muss auf die Datentypen DECIMAL und NUMERIC zurückgreifen, bei diesen Datentypen kann die Nachkommastellenanzahl exakt definiert werden.

    Wird mit dem InterBase 6 gearbeitet, unterscheidet sich das Verhalten in einer SQL Dialect 3-Datenbank vom Verhalten einer SQL Dialect 1-Datenbank (der InterBase kennt nun 64-Bit-Integers). Die Rundungsprobleme bei FLOAT-Spalten sind jedoch in beiden Varianten identisch.

    P.S: In meinem Buch <i>Client/Server-Datenbankentwicklung mit Delphi</i> gehe ich auf den Seiten 454 bis 466 im Detail auf die Zusammenhänge ein.
    &#10

    Comment

    Working...
    X