Datenbanken
Posts 1-2 of 2
-
Guido Klein Premium MemberThe company name is only visible to registered members.Bug beim SQL-Server??
Ich glaube, ich habe ein Bug beim MSSQL Server gefunden.
Das mein einen gewissen Informationsverlust beim kürzen von Nachkommastellen, ist ja bekannt.
Aber man kann beim SQL-Server wohl auch einen Informationsgewimm gelten machen.
DECLARE @test float
SET @test = 88951.57
select CONVERT(numeric(38,12), @test), CONVERT(numeric(38,2), @test)
-------------------- ---------------------- --------------------------------------- ---------------------------------------
different values => 88951,57 88951.570000000007 88951.57
Vielleicht hat ja jemand eine Idee, wo die letzte 7 herkommt..
Ich habe dies beim MS SQL-Server 2008 und 2008 R2 ausprobiert, dasselbe Ergebniss.
Vielen Dank für Eure Beiträge.
- 02 Nov 2011, 9:08 pm
-
Hans Adams Premium MemberThe company name is only visible to registered members.Re: Bug beim SQL-Server??
Guido Klein schrieb:
Ich glaube, ich habe ein Bug beim MSSQL Server gefunden. Das mein einen gewissen Informationsverlust beim kürzen von Nachkommastellen, ist ja bekannt.
Aber man kann beim SQL-Server wohl auch einen Informationsgewimm gelten machen.
DECLARE @test float
SET @test = 88951.57
select CONVERT(numeric(38,12), @test), CONVERT(numeric(38,2), @test)
-------------------- ---------------------- --------------------------------------- ---------------------------------------
different values => 88951,57 88951.570000000007 88951.57
Vielleicht hat ja jemand eine Idee, wo die letzte 7 herkommt..
Klar, aus der Gleitkommarithmetik.... Die Mantisse Deiner Zahl läßt sich nicht als endlichen (64Bit!) Dezimalbruch darstellen....
Nun wurde die Textrepräsentation Deiner Zahl in die maschineninterne Gleitkommarepräsentation abgebildet, unter Verlust aller Dualstellen kleiner als -63. Und dann wurde diese Zahl wieder in eine Textrepräsentation Deiner Zahl umgewandelt.... und da knallte bei den kleinsten Dualstellen....
Deshalb hat man ja Währungen generell nicht als Gleitkommazahl, sondern als Fixkommazahl in der BCD-Repräsentation dargestellt.... Mit korrekten kaufmännischen Rundungsverfahren gibt es o.g. Probleme nicht....
Ich habe dies beim MS SQL-Server 2008 und 2008 R2 ausprobiert, dasselbe Ergebniss.
Klar, die Gleitkommaarithmetik hat sich ja nicht geändert....
Du kannst einmal Paranoia (
http://www.netlib.org/paranoia/) auf (PL)SQL portieren, und dann Dein Blaues Wunder erleben.
Empfiehlt HA
Vielen Dank für Eure Beiträge.
- 02 Nov 2011, 9:28 pm
