我将值 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)问题跟踪器已停用)
但是,SQLCMD
、osql
和查询分析器则不然。
SQLCMD -E -S server -Q"SELECT CONVERT(FLOAT, 1555.4899999999998)"
关于sql-server - SQL Server Management Studio 中浮点类型的全精度输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099575/