2016-10-20 6 views
-1

は、私はどちらかLTRIMまたはRTRIMを通じてfloat値を渡すとき、私はと全く予期しない動作を説明するだろうか経験しています:LTRIMとRTRIM切捨て浮動小数点数

MyCol    | lr  | l  | r 
-------------------------------------------- 
11.7333335876465 | 11.7333 | 11.7333 | 11.7333 
次の結果が得られます

CREATE TABLE MyTable 
(MyCol float null) 

INSERT MyTable 
values (11.7333335876465) 

SELECT MyCol, 
     RTRIM(LTRIM(MyCol)) lr, 
     LTRIM(MyCol) l, 
     RTRIM(MyCol) r 
FROM MyTable 

SQL Server 2014および2016で同じ動作が確認されています。

LTRIMRTRIMは、値から空白を取り除くだけです。キャストしないでください/切り捨ててください。

誰でもここで何が起こっているのか考えていますか?


この背景を説明するだけです。私はC#POCOのセットのプロパティを使用してSQLクエリを生成しています(結果はMD5ハッシュを生成するために使用され、Oracleテーブルの同等の値と比較されます)。便宜上LTRIM/RTRIM 。機能要件に合うように、文字列にキャストされるよう

+2

が見えます。それについて何も変わっていません –

+4

なぜ、浮動小数点データ型の何かを空白に整えようとしていますか?何もないでしょう。これは文字列表現にのみ適用できます。 –

+2

浮動小数点値を持つ文字列関数を使用すると予期しない動作が発生します。そうしないでください。 –

答えて

1

おそらくあなたはフォーマットを使用することができます()の代わりに

Declare @F float = 11.7333335876465 
Select format(@F,'#.##############') 

戻り

11.7333335876465 
関連する問題