Abgerundete Dezimalzahlen in SQL Server 2008

8

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:

  1. Wie wird eine Dezimalzahl abgerundet ( 3.69 == & gt; 3.5 )?
  2. Wie werden die letzten drei Ziffern einer Ganzzahl aufgerundet (z. B. 142600 == & gt; 143000 )?
Bahar Akhtarian 12.01.2014, 06:59
quelle

3 Antworten

6

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:

%Vor%

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 .

    
J0e3gan 12.01.2014, 07:15
quelle
1

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

%Vor%

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.

    
StuartLC 12.01.2014 07:48
quelle
0

Die Funktion "Oracle / PLSQL FLOOR " gibt den größten Ganzzahlwert zurück, der gleich oder kleiner als eine Zahl ist. zB:

%Vor%     
ajit singh 25.05.2016 16:41
quelle

Tags und Links