Arithmetischer überlauffehler beim konvertieren von float-Datentyp numeric mit positiven Exponenten, aber nicht negativen Exponenten
Meine numeric-Spalte festgelegt ist (38,19), aber ich bekomme bizarre arithmetischer überlauf-Fehler.
Was FUNKTIONIERT:
1a) INSERT INTO sen.numeric_table VALUES('MaxUBInt', 1844674407370955161);
1b) INSERT INTO sen.numeric_table VALUES('SmallestFloatBy10', 1.175494351e-39);
Was NICHT FUNKTIONIERT:
2a) INSERT INTO sen.numeric_table VALUES('MaxFloat', 3.402823466e+38);
2b) INSERT INTO sen.numeric_table VALUES('MaxFloatBy10', 3.402823466e+39);
Was ich nicht verstehe:
1) sollte Die Spalte zulassen, dass jede Eingabe höchstens insgesamt 38 Ziffern sowie nicht mehr als 19 stellen nach dem Dezimaltrennzeichen. Wenn dies wahr ist, warum tut (1b) Arbeit, wenn ich deutlich über 38 Gesamtanzahl der Ziffern? (sowie die überschreitung 19 stellen Genauigkeit nach dem Komma)
Dank!
- 1b gerundet werden, um fit in die max Anzahl der Ziffern nach dem Komma (das Ergebnis ist wahrscheinlich
0
). Aber größere zahlen führen zu einem überlauf. Und Sie haben nur 19 Ziffern vor dem Komma (19+19=38), die Sie eindeutig überschreiten mit Ihren großen Eingängen - Danke! Genau das, was ich brauchte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Ihre tests in 1) und 2), es sieht aus wie Sie versuchen zu finden, die Obere Schranken für int-und float-und Untergrenzen für Schwimmer mit den numerischen(38,19) data type. Die int-Grenzen werden bestimmt durch den Skalierungsfaktor (19), und die Genauigkeit, Grenzen definiert werden für die numerischen Datentyp (siehe unten).
Maximale Präzision in der SQL Server ist von -10^38 +1 bis 10^38 -1 nach MSDN. Minimale Präzision Runde basierend auf dem Wert für
NUMERIC_ROUNDABORT
.Wenn dies ist eine wissenschaftliche Anwendung, die Sie Lesen möchten, können Sie die MSDN-Beschreibung Präzision, Länge und Skalierung, vor allem, wenn Sie die Durchführung von Operationen mit den gespeicherten Werten im numerischen Spalte.
Unterlauf nicht dazu führen, dass ein Fehler in SQL server; es wird nur in der Runde. Es gibt ein paar gute Diskussionen darüber. Diese hier zum Beispiel:
http://social.msdn.microsoft.com/Forums/en-US/2e0ca122-ecca-4ec6-a60b-e3d4b9f51d94/underflow-does-not-cause-an-error?forum=transactsql