小编典典

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

sql

将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.

有谁知道为什么会这样吗?我猜想这有点浮动的细微差别。但是我从来没有想过像上面这样的问题。有任何想法吗?在此先感谢您的帮助。


阅读 41

收藏
2021-04-07

共1个答案

小编典典

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

使用ROUND(weight * 1000000.0, 0)代替。

2021-04-07