Abrundung von Dezimalzahlen in SQL Server 2008
Lese ich alle Runden-Funktionen von T-SQL wie Round
, Floor
, und Ceil
, aber keiner von Ihnen hat abgerundet Dezimalzahlen richtig für mich.
Ich habe 2 Fragen:
- Wie abrunden einer Zahl (
3.69
==>3.5
)? - Wie Sie in der Runde der letzten 3 Ziffern einer Ganzzahl (z.B.
142600
==>143000
)?
- Sollten Sie schreiben von udf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
1)
select CAST(FLOOR(2 * 3.69) /2 AS decimal(2, 1))
behandelt den ersten Fall - mit freundlicher Genehmigung von einer Antwort auf eine ähnliche Frage auf SQL-Server-Foren, die ich angepasst und schnell überprüft.Beachten Sie, dass, wenn die zahlen, die Sie sind, Rundung auf die nächste
0.5
könnte größer sein (z.B.333.69
=>333.5
), werden Sie sicherstellen, dass Sie mehrdecimal
Präzision, wenn Sie cast (z.B.select CAST(FLOOR(2 * 3.69) /2 AS decimal(10, 1))
), oder Sie konnten sich ein überlauf-Fehler:Zusätzliche Präzision wird nicht auf die bottom-line-Ergebnis (D. H.
select CAST(FLOOR(2 * 3.69) /2 AS decimal(10, 1))
undselect CAST(FLOOR(2 * 3.69) /2 AS decimal(2, 1))
sowohl der Ertrag3.5
); aber es ist eine Verschwendung, wenn die Zahl, die Sie Runden werden immer kleiner.Online-Referenzen mit Beispielen sind verfügbar für T-SQL
BODEN
,CAST
, unddecimal
zu helfen.2)
select ROUND(142600, -3)
behandelt den zweiten Fall.Einen ähnlichen online-Referenz ist verfügbar für T-SQL
ROUND
.Als pro @J0e3gan 's anwser, Sql Server Runde ermöglicht Rundung auf die nächste Potenzen von 10 mit der
length
parameter, wo die Länge ist10^(-length)
z.B.etc
Jedoch im Allgemeinen mit einer einfachen 1-basierte Rundung Funktion - z.B. (Sql-Runde mit Länge=0), um Runde für einen beliebigen Wert von "nächste N" - mit der Formel:
z.B. die nächsten 100
... Nächsten 0,5
... Nächste 0.02
etc
Denken Sie daran, dass der Typ, der Teiler muss numeric /decimal oder float.
Oracle/PLSQL
FLOOR
- Funktion liefert den größten ganzzahligen Wert, der gleich oder kleiner als eine Zahl.eg: