SQL Server 2008 R2
为什么使用or将 a 转换FLOAT
为字符串 ( Varchar
/ Nvarchar
)时会发生舍入或截断?Cast
Convert
使用CAST
DECLARE @floatVal FLOAT = 4.76758527755737
SELECT
CAST(@floatVal AS VARCHAR(20)) 'VARCHAR',
CAST(@floatVal AS NVARCHAR(20)) 'NVARCHAR'
输出
VARCHAR NVARCHAR
4.76759 4.76759
使用CONVERT
:
DECLARE @floatVal FLOAT = 4.76758527755737
SELECT
CONVERT(VARCHAR(20), @floatVal) 'VARCHAR',
CONVERT(NVARCHAR(20), @floatVal) 'NVARCHAR'
输出
VARCHAR NVARCHAR
4.76759 4.76759
但是,STR
没有截断/舍入
DECLARE @floatVal FLOAT = 4.76758527755737
SELECT
LTRIM(STR(@floatVal, 17, 14)) 'STR'
输出
STR
4.76758527755737
提前致谢
从有关CAST 和 CONVERT的文档中:
CAST
是“显然”使用默认样式0,因为在使用CAST
.CONVERT
默认为样式0,因为您没有指定样式。CONVERT
您可以使用和样式获得更高的精度(并且您必须增加目标数据类型的长度),但结果似乎是科学计数法(因此,不完全像STR
)。