当前位置: 首页 > 面试题库 >

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

唐阳晖
2023-03-14
问题内容

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

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


问题答案:

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

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



 类似资料:
  • 很抱歉我发了这么长的帖子,我只是想提供我能提供的所有信息,并在问题出现之前解决问题。 继续该异常给出了下一个“Container is disposed and should not be used:Container is disposed.您可以通过:Container.with(rules=>rules.withCaptureContainerDisposeStackTrace())在消息中

  • 问题内容: 以下代码存在问题: 是,是。在不丢失信息的情况下,在这两种数字类型之间进行转换以使用编码器和解码器的唯一方法是吗? 注意,在您的典型情况下,我不尝试直接进行数值转换。我更关心维护随机数生成器的统计属性。 问题答案: 看到-1与以32位运行的进程一致。 例如,请参阅Go1.1发行说明(已引入) 使用可以帮助您查看发生了什么 事实证明,OP实战程序([在注释中]确认它最初以32位运行(因此

  • 我需要将docx转换成pdf,我正在使用docx4j-3.2.1库。生成的pdf输出中有一些格式丢失。 可以清楚地看到,有两个值得注意的问题。一个是页眉中图像的大小/尺寸,在生成的pdf中减小。它没有像输入中那样覆盖整个标题区域。 其次是字体大小似乎发生了变化(或者字体本身发生了变化) 我如何在生成的pdf中保留标题上原始图像的尺寸?有没有一些方法可以用来微调docx到pdf的转换? 任何帮助都非

  • 问题内容: 我在代码隐藏中收到转换失败的错误。我的代码如下: 我收到以下错误: 将nvarchar值转换为数据类型int时,转换失败。 在这里必须进行哪些更改? 问题答案: 我想这是一个整数,但您正在分配一个字符串。因此,这可能会解决它: 编辑:由于您已评论该会话存储了用户名,但该列是一个int列,因此您有三个选择: 更改会话以存储用户标识而不是名称 更改列以存储用户名 从存储用户名的表中选择用户

  • 问题内容: 我创建了一个过程并收到了此消息 将varchar值’%’转换为数据类型int时,转换失败。 我不知道这可能是什么,但是当我将过程更改为这样时: 似乎工作正常。我是SQL的新手,所以可以得到任何帮助,也许有更好的方法来做我想做的事情? 问题答案: 这是在子句中: 是一个整数。因此,您需要将其转换为字符串: 为什么要使用称为的列是可疑的。也许您只想要:

  • 我有一个方法可以使用SimpleDateFormat将字符串(yyyy-MM-dd hh:mm:ss.sss)解析为日期对象。