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)改用.