如何在SQL Server中查找浮点舍入错误

位编码器

我已经缩小了旧版SQL Server 2008数据库上的数据问题。

该列为“浮动”。SSMS将其中四个记录显示为“ 0.04445”,但是当我查询与第一个值匹配的所有记录时,仅返回四个中的三个。最后一条记录有所不同,我怀疑它与0.0000000001差不多,并且SMSS GUI对其进行了四舍五入以进行显示(?)。使用'<'运算符的结果类似('where my_column <0.04445'返回四个中的三个),这在调用的应用程序中造成了一些灾难性的计算错误。

我尝试将其强制转换为小数点('SELECT CAST(my_column as DECIMAL(38,20))FROM ...')但所有四个记录都刚刚返回0.044450000000000000000000000000

我怀疑在同一列中还有许多其他类似的错误,因为多年来已经以各种方式输入了数据。

有什么办法可以查看此列的完整值/精度/尾数,而不是四舍五入的值?

我无法更改架构或应用程序。

更新-使用“编辑前200行”功能,我可以看到其中大约四分之三为0.044449999999999996,而其他四分之一为0.04445。但是我无法在常规查询结果中显示出准确度

弗拉基米尔·巴拉诺夫(Vladimir Baranov)

因此,您的问题实际上是关于SSMS的,而不是关于您的应用程序或SQL Server本身的,对吗?您想查看floatSSMS中的实际值而不进行舍入,对吗?

通过设计,SSMSfloat在显示期间会四舍五入例如,请参阅此答案

但是,如果您使用CONVERT函数显式将其转换为字符串,则可以看到存储在列中的实际值

浮动和真实风格

对于浮点实数表达式,样式可以具有下表中显示的值之一。其他值被处理为0。

0(默认),最多6位数字。适当时以科学计数法使用。

1始终为8位数字。始终以科学计数法使用。

2始终为16位数字。始终以科学计数法使用。

3始终为17位数字。用于无损转换。使用这种样式,可以保证每个不同的浮点数或实数值都可以转换为不同的字符串。

看起来样式3正是您所需要的:

convert(varchar(30), my_column, 3)

这是我的测试:

DECLARE @v1 float = 0.044449999999999996e0;
DECLARE @v2 float = 0.044445e0;

SELECT @v1, @v2, convert(varchar(30), @v1, 3), convert(varchar(30), @v2, 3)

我在SSMS中看到的结果是:

+------------------+------------------+-------------------------+-------------------------+
| (No column name) | (No column name) | (No column name)        | (No column name)        |
+------------------+------------------+-------------------------+-------------------------+
| 0.04445          | 0.044445         | 4.4449999999999996e-002 | 4.4444999999999998e-002 |
+------------------+------------------+-------------------------+-------------------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL Server中查找浮点舍入错误

来自分类Dev

如何避免单元测试中的浮点舍入错误?

来自分类Dev

如何在Macintosh 2011的Microsoft Excel中更正浮点舍入错误?

来自分类Dev

如何在C#中舍入浮点值?

来自分类Dev

如何在C#中舍入浮点值?

来自分类Dev

如何在 PHP 中舍入浮点数?

来自分类Dev

如何在 C# 中舍入浮点变量

来自分类Dev

如何在SPARK SQL中舍入小数

来自分类Dev

如何舍入 SQL Server 中的以下值?

来自分类Dev

如何在SQL Server中查找循环依赖表

来自分类Dev

从C#,如何在SQL Server中查找表的列名?

来自分类Dev

如何在SQL Server中查找日期间隔?

来自分类Dev

如何在Sql Server表中查找所选行的大小?

来自分类Dev

如何在SQL Server中查找日期间隔?

来自分类Dev

如何在SQL Server中查找非空约束的名称

来自分类Dev

如何在SQL Server中查找更高的重复ID?

来自分类Dev

如何在SQL Server 2005中查找值的最低行数

来自分类Dev

如何在Sql Server表中查找所选行的大小?

来自分类Dev

如何在sql server中开发查找客户总数的功能?

来自分类Dev

如何在SQL Server 2012中查找参考键?

来自分类Dev

如何在SQL Server中查找非空约束的名称

来自分类Dev

如何在SQL server中查找记录的变化

来自分类Dev

sql server 如何在复合非聚集索引中查找?

来自分类Dev

如何在 SQL Server 中查找当前值以外的值?

来自分类Dev

如何在 SQL Server 中查找/查看 tempdb

来自分类Dev

如何在SQL Server中测试存储过程错误

来自分类Dev

如何舍入嵌套元组列表中的每个浮点数

来自分类Dev

如何使用C ++在OpenCV中舍入浮点数

来自分类Dev

XSLT:如何舍入属性中的浮点数列表?

Related 相关文章

热门标签

归档