sql-server - SQL Server Management Studio 中浮点类型的全精度输出

标签 sql-server floating-point ssms

我将值 1555.4899999999998 存储在 float 列中,默认精度为 (53)。当我执行简单的 select 操作时,SSMS 对输出进行四舍五入,而不是使用所有可用的精度进行打印。最近这给我带来了一些问题,因为打印的值不能作为 float 文字来匹配实际存储的值。

例如(请注意,这两个数字在默认 float 中都有精确的表示),

declare @f1 float;
declare @f2 float;
set @f1 = 1555.49;
set @f2 = 1555.4899999999998;
select @f1, @f2;
select STR(@f1,30,15), STR(@f2,30,15);

输出:

1555.49 1555.49
1555.490000000000000    1555.489999999999800

在查询分析器中,第一个选择输出:

1555.49 1555.4899999999998

这就是我想从 Management Studio 获得的行为。有没有办法防止 SSMS 在其结果显示中舍入?

最佳答案

没有。

SQL Server Management Studio 对浮点值进行舍入以供显示; 有一个Connect suggestion to change this behavior ,但“按设计”已关闭。(Microsoft Connect,Microsoft 软件的公共(public)问题跟踪器已停用)

但是,SQLCMDosql 和查询分析器则不然。

SQLCMD -E -S server -Q"SELECT CONVERT(FLOAT, 1555.4899999999998)"

关于sql-server - SQL Server Management Studio 中浮点类型的全精度输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099575/

相关文章:

c# - 存储过程不会将控制返回给 C# 代码

sql-server - 如何优化 SQL Server 列存储对齐

floating-point - 在 Julia 的 [-1, 1] 中获取随机浮点值

sql-server-2008 - SQL Server 错误 "Invalid attempt to GetBytes on column"

sql - 为什么没有选项使用 ssms 将数据导入到 Azure 数据库?

sql - 如何在SQL中从XML中获取指定的节点

sql - 如果有值则返回该值。如果记录不存在或列为空,则在 Sql Server 中返回 0 - 不同的方式

c++ - 如何防止相机 vector 中的浮点错误

javascript - 在 JavaScript 中,我应该调用 parseFloat 将字符串转换为 float ,还是应该让 JavaScript 转换它们?

sql - .Net SqlCommand.ExecuteNonQuery 中的查询超时,适用于 SQL Server Management Studio