我在将存储在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.
有谁知道为什么会这样?我猜它是某种漂浮的细微差别。但我从未想过会出现类似上述问题。有任何想法吗?在此先感谢您的帮助。
答案 0 :(得分:16)
这是典型的(int)((0.1+0.7)*10)问题。因为浮点数具有任意精度,所以即使对于非常简单的情况,也可以在转换为int时丢失一些数据。
改为使用ROUND(weight * 1000000.0, 0)
。
答案 1 :(得分:0)
由于浮动计算机的特殊性,这是浮点数据类型的常见行为。 使用小数点后固定位的十进制(数字)数据类型。例如,十进制(10,6)。