Ich lese alle Rundungsfunktionen von T-SQL wie Round
, Floor
und Ceil
, aber keine davon hat die Dezimalzahlen für mich korrekt abgerundet.
Ich habe 2 Fragen:
3.69
== & gt; 3.5
)? 142600
== & gt; 143000
)? 1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
behandelt den ersten Fall - dank einer Antwort zu einer ähnlichen Frage in SQL Server Foren , die ich angepasst und schnell überprüft habe.
Beachten Sie, dass, wenn die Zahlen, die Sie auf den nächsten 0.5
runden, größer sein könnten (zB 333.69
= & gt; 333.5
), geben Sie unbedingt decimal
precision an, wenn Sie casten (zB select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
), oder Sie könnten einen Überlauffehler bekommen:
Die Extra-Genauigkeit wirkt sich nicht auf das Endergebnis aus (d. h. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1))
und select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1))
beide yield 3.5
); aber es ist verschwenderisch, wenn die Zahlen, die Sie runden, immer kleiner sein werden.
Online-Referenzen mit Beispielen sind für T-SQL verfügbar FLOOR
, CAST
und decimal
um zu helfen.
2) select ROUND(142600, -3)
behandelt den zweiten Fall.
Eine ähnliche Online-Referenz ist für T-SQL verfügbar ROUND
.
Wie in @ J0e3gan's anwser, Sql Server Runde erlaubt das Runden auf die nächsten Potenzen von 10 mit dem Parameter length
, wobei die Länge 10^(-length)
ist, z
usw.
Im Allgemeinen jedoch mit einer einfachen 1-basierten Rundungsfunktion - z. (Sql Round mit Length = 0) um auf einen beliebigen Wert von "nearest N" zu runden - mit der Formel: %Vor%z.B. nächste 100
%Vor%... Nächste 0.5
%Vor%... Nächste 0.02
%Vor%usw.
Denken Sie daran, dass der für die Teiler verwendete Typ numerisch / dezimal oder float sein muss.
Die Funktion "Oracle / PLSQL FLOOR
" gibt den größten Ganzzahlwert zurück, der gleich oder kleiner als eine Zahl ist.
zB:
Tags und Links sql-server tsql rounding