【问题标题】:Converting SQL FLOAT to SQL INT, lost data将 SQL FLOAT 转换为 SQL INT,丢失数据
【发布时间】:2011-05-22 20:56:18
【问题描述】:

我在将存储在 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.

有人知道这是为什么吗?我猜这是某种浮动的细微差别。但我从没想过它会像上面那样有问题。有任何想法吗?提前感谢您的帮助。

【问题讨论】:

    标签: sql casting floating-point integer


    【解决方案1】:

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

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

    【讨论】:

    • ROUND(weight * 1000000.0, 0) 会更好,因为我们不知道作者使用的是哪个系统。
    【解决方案2】:

    由于计算机上浮点数的特殊性,这是浮点数数据类型的常见行为。 使用小数点后固定位数的十进制(数字)数据类型。例如,十进制(10, 6)。

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      相关资源
      最近更新 更多