Konvertierung von SQL FLOAT nach SQL INT, verlorene Daten

8

Ich habe einige Probleme mit der Konvertierung einiger Daten, die in einem FLOAT-Datentyp gespeichert sind, in Daten, die in einem INT-Datentyp gespeichert sind. Das folgende Beispiel veranschaulicht mein Problem:

%Vor%

Die gewünschten Ergebnisse wären: ID = 1 VALUE = 15662 Wenn ich jedoch von der Tabelle @data komme, scheint das nicht zu funktionieren. Ich bekomme stattdessen ID = 1 VALUE = 15661.

Hat jemand eine Idee warum das so ist? Ich vermute, es ist eine Art Float Nuance. Aber ich hätte nie gedacht, dass es ein Problem mit etwas wie dem oben genannten hätte. Irgendwelche Ideen? Vielen Dank im Voraus für Ihre Hilfe.

    
Anish Patel 09.12.2010, 13:29
quelle

2 Antworten

16

Dies ist das klassische (int) ((0.1 + 0.7) * 10) Problem. Da Floats eine beliebige Genauigkeit haben, ist ein Datenverlust bei der Umwandlung in int selbst für sehr einfache Fälle möglich.

Verwenden Sie stattdessen ROUND(weight * 1000000.0, 0) .

    
Alin Purcaru 09.12.2010, 13:33
quelle
0

Dies ist ein allgemeines Verhalten für den Float-Datentyp aufgrund der Spezifität von float auf Computern. Verwenden Sie den Datentyp Dezimal (Zahl) mit festen Nachkommastellen. Zum Beispiel, dezimal (10, 6).

    
Lex 09.12.2010 13:40
quelle