2011-11-11 7 views
7

float列に格納されている値1555.4899999999998の既定の精度(53)です。私が単純なselectを実行すると、SSMSはすべての使用可能な精度で出力するのではなく出力を丸めます。実際に保存された値と一致するように、印刷された値がfloatのリテラルとして機能しないため、最近私のためにいくつかの不具合が発生しました。例えばSQL Server Management Studioでの浮動小数点型の完全精度出力

(これらの数値の両方がデフォルト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) 

出力:

:クエリアナライザ、その第一 select出力の

1555.49 1555.49 
1555.490000000000000 1555.489999999999800 

1555.49 1555.4899999999998 

これは私がしたい動作ですManagement Studioから取得します。 SSMSの結果表示が丸められないようにする方法はありますか?

答えて

7

SQL Server Management Studioのは、表示目的のために浮動小数点値を丸め。 Connect suggestion to change this behaviorがありますが、「設計通りに」閉じられています。

ただし、SQLCMD,osqlおよびクエリアナライザはありません。

SQLCMD -E -S server -Q"SELECT CONVERT(FLOAT, 1555.4899999999998)" 
0

10進数型よりも浮動小数点型を使用する理由はありますか?浮動小数点数は分数として格納されます。浮動小数点数は、操作を行うときにしばしばわずかな負担になります。これは、ピクセルのサイズよりもinnaccuracyの方がはるかに重要でないグラフィックスアプリケーションを使用している場合は問題ありませんが、お金を扱う会計アプリケーションのような大きな問題です。

小数の精度は、フロートを使用することによって得られるスピードやサイズの利点よりも、ほとんどのアプリケーションにとって重要であると言いたいと思います。

+1

データベーススキーマは私の制御の外にあるREPLACE残念ながら。私は100%フロートはこのアプリケーションのための悪い選択ですが、それが正しいタイプであれば、私はまだManagement Studioでより正確な表現が期待できます。 – Simon

-2

オリジナルの投稿に編集します。私はこのページを横断して少し違った問題を解決しようとしていました。私はちょうど浮動小数点型が科学的表記ではなく "通常の"数値を返すことを望んでいました。

元々2つの変換が提案されました。これで終了しました。下記の7は、小数点以下の桁数を表示するように変更することができます。置換とトリムは、先頭と末尾のゼロを取り除きます。

、(RTRIM(LTRIM((STR(X、20、7)、 '0'、 ' ')))、'' をREPLACE '0')

+2

目的はVARCHARに変換されません。私の例ではSTR()コールが既にそうしています。私は、クエリにコンバージョンを追加することなく、SSMSのデフォルトの動作を変更したいと考えていました。ちなみに、小数点以下5桁では、私の例でも値をあいまいにするだけでは不十分です。それには少なくともDECIMAL(28,13)が必要です。 – Simon

+0

私は私の答えを編集しました。それでもSSMSは役に立ちません。私が望む文字列表現を返します。 おそらく便利な回避策です。 – user600410

関連する問題