Volle Genauigkeit der Ausgabe von Gleitkomma-Datentypen in SQL Server Management Studio
Habe ich den Wert 1555.4899999999998
gespeichert float
Spalte mit Standard-Genauigkeit (53). Wenn ich eine einfache select
, SSMS Runden die Ausgabe anstatt Druck mit allen zur Verfügung stehenden Präzision. Es verursacht einige Probleme für mich vor kurzem, da der Wert gedruckt, nicht wie ein float
wörtliche übereinstimmung der tatsächlich gespeicherten Wert.
Beispiel (beachten Sie, dass diese beiden zahlen haben eine exakte Darstellung in der Standard -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)
Ausgänge:
1555.49 1555.49
1555.490000000000000 1555.489999999999800
In Query Analyzer, das erste select
Ausgänge:
1555.49 1555.4899999999998
Das ist das Verhalten, das ich will, um von Management Studio. Gibt es eine Möglichkeit zu verhindern, dass SSMS durch Rundung in dessen Ergebnis anzeigen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keine.
SQL Server Management Studio Runden floating-point-Werte für die Anzeige; es ist ein Verbinden Sie Vorschlag, um dieses Verhalten zu ändern, aber es ist geschlossen "Durch Design".
Jedoch
SQLCMD
,osql
und den Query Analyzer nicht.Microsoft Connect Has Been Retired
Gibt es einen Grund, warum man sich lieber einen float-Typ als ein decimal-Typ? Floats gespeichert sind, als Fraktionen, die bewirkt, dass Sie oft leicht innacurate, wenn Operationen auf Ihnen. Das ist okay, wenn Sie eine Grafik-Anwendung, wo die innaccuracy ist viel weniger bedeutend als die Größe von einem pixel, aber es ist ein riesiges Problem in so etwas wie eine Buchhaltung Anwendung, wo man mit Geld zu tun.
Ich würde Wagen zu sagen, dass die Genauigkeit von einer dezimale wichtiger ist für die meisten Anwendungen als Vorteil in der Geschwindigkeit oder Größe, Sie würden von mit einem Schwimmer.
float
ist eine schlechte Wahl für diese Anwendung, aber wenn es der richtige Typ wäre ich immer noch erwarten, eine genauere Darstellung in Management Studio.Edit zu meinem ursprünglichen post. Ich war versucht zu lösen ein etwas anderes problem, wenn ich lief über diese Seite. Ich wollte nur einen float-Typ, um wieder eine "normale" Zahl, keine wissenschaftliche notation.
Vorgeschlagen, zwei Bekehrte ursprünglich. Wunde mit diesem dann Ende. Die 7 unten verändert werden könnte, um zu zeigen, wie viele Dezimalstellen, wie Sie möchten. Ersetzen und Borten loszuwerden, führende und nachgestellte Nullen.
REPLACE(RTRIM(LTRIM(REPLACE(STR(x, 20, 7),'0',' '))),' ','0')