Sql-Server

TSQL 將 FLOAT 轉換為 STRING 截斷/舍入問題

  • April 21, 2020

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

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/172129