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

Ani*_*tel 8 sql floating-point integer casting

将存储在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)
Run Code Online (Sandbox Code Playgroud)

期望的结果将是:ID = 1 VALUE = 15662 然而,当从@data桌子来,我似乎没有得到这个.我反而得到了ID = 1 VALUE = 15661.

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

Ali*_*aru 16

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

ROUND(weight * 1000000.0, 0)改用.