Sql-Server
TSQL 將 FLOAT 轉換為 STRING 截斷/舍入問題
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
)。DECLARE @floatVal FLOAT = 4.76758527755737 SELECT CONVERT(VARCHAR(30), @floatVal,1) 'VARCHAR' ,CONVERT(NVARCHAR(30), @floatVal,1) 'NVARCHAR' GO