将SQL FLOAT转换为SQL INT,丢失数据

将存储在FLOAT数据类型中的某些数据转换为存储在INT数据类型中的数据时遇到一些问题.以下示例说明了我的问题:

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)

期望的结果是:ID = 1 VALUE = 15662
但是当来自@data表时,我似乎没有得到这个.我改为ID = 1 VALUE = 15661.

有谁知道为什么会这样?我猜它是某种漂浮的细微差别.但我从未想过会出现上述问题.有任何想法吗?在此先感谢您的帮助.

这是经典的(int)((0.1+0.7)*10)问题.因为浮点数具有任意精度,所以即使对于非常简单的情况,也可以在转换为int时丢失一些数据.

请改用ROUND(weight * 1000000.0,0).

翻译自:https://stackoverflow.com/questions/4398700/converting-sql-float-to-sql-int-lost-data

转载注明原文:将SQL FLOAT转换为SQL INT,丢失数据