Konvertierung von SQL FLOAT SQL INT, verlorene Daten
Ich habe einige Probleme mit der Konvertierung von einigen Daten, die in einen FLOAT-Datentyp gespeicherten Daten in einem INT-Datentyp. Das folgende Beispiel zeigt mein problem:
DECLARE @data TABLE
(
id INT,
weight FLOAT
)
INSERT INTO @data VALUES(1,0.015662)
SELECT CAST(weight * 1000000 AS INT) FROM @data
SELECT 0.015662 * 1000000
SELECT CAST(0.015662 * 1000000 AS INT)
Das gewünschte Ergebnis wäre: ID = 1 VALUE = 15662
Jedoch, wenn Sie von @data
Tabelle, die ich nicht scheinen, um dieses zu erhalten. Ich stattdessen bekommen ID = 1 VALUE = 15661.
Hat jemand eine Idee, warum das so ist? Ich vermute, es ist irgendeine Art von float-nuance. Aber ich hätte nie gedacht, es hätte ein problem mit so etwas, wie das oben. Irgendwelche Ideen? Vielen Dank im Voraus für Eure Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die klassische (int)((0.1+0.7)*10) problem. Da schwebt willkürlich Präzision einige Daten verloren gehen, wenn casting nach int möglich ist, auch für sehr einfache Fälle.
Verwenden
ROUND(weight * 1000000.0, 0)
statt.Dies ist gemeinsames Verhalten für float-Datentyp aufgrund der Besonderheit der Schwimmer auf den Computern.
Decimal (Nummer) Datentyp mit festen Ziffern nach dem Dezimalpunkt. Zum Beispiel, dezimal(10, 6).