È possibile arrotondare facilmente una cifra su a 100 (o 1000, 500, 200 ecc.) Più vicini in SQL Server?Arrotondamento * UP * al più vicino 100 in SQL Server
Quindi:
720 -> 800
790 -> 800
1401 -> 1500
È possibile arrotondare facilmente una cifra su a 100 (o 1000, 500, 200 ecc.) Più vicini in SQL Server?Arrotondamento * UP * al più vicino 100 in SQL Server
Quindi:
720 -> 800
790 -> 800
1401 -> 1500
Quanto segue dovrebbe funzionare. Dopo aver letto la tua domanda, non sono esattamente sicuro di ciò che vuoi restituire. Per questo 100 restituisce 100.
select floor((X + 99)/100) * 100;
Questo dà i seguenti risultati:
0 -> 0
1 -> 100
99 -> 100
100 -> 100
101 -> 200
Una possibilità sarebbe quella di utilizzare la funzione CEILING() in questo modo:
SELECT CEILING(@value/100.0) * 100
Potrebbe essere necessario convertire prima il valore in decimale, a seconda del tipo.
Questo è ovviamente la migliore risposta – ministry
Questo non sempre arrotonda * SU *, come specificato nella domanda. Per esempio 'SELECT ROUND (129.0/100, 0) * 100' restituisce 100 invece di 200. – Gyromite
@Gyromite strano che il sito web che ho collegato fosse corretto, ma devo averlo copiato male:/ – krock
Non c'è alcuna funzione nativa che lo faccia, ma ci sono un numero qualsiasi di trucchi matematici semplici che lo faranno. Un esempio:
DECLARE @Foo int
SET @Foo = 720
print @Foo
print (@Foo + 100) % 100
PRINT @Foo - (@Foo + 100) % 100
Questo non sempre è rotondo * SU *, come specificato nella domanda. L'esempio con 720 come input dovrebbe restituire 800, ma invece restituisce 700. – Gyromite
È possibile utilizzare questo codice, supponendo che il amount
è un int. In caso contrario, sarà necessario eseguire il cast, in modo da ottenere la divisione intera.
If amount % 100 != 0 Then
roundedAmount = ((amount/100) * 100) + 100
Else
roundedAmount = amount
Si potrebbe desiderare di confezionare questo in un user defined function.
Utilizzare la funzione SOFFITTO per arrotondare una figura fino
DECLARE @Number DECIMAL, @RoundUp DECIMAL
SET @RoundUp = 100
SET @Number = 720
SELECT CEILING(@Number/@RoundUp)*@RoundUp
per arrotondamento al migliaio più vicino, prega provare quanto segue: -
select round(YourValue, -3)
Saluti !!!!!
Questo round down, non attivo. Provalo. selezionare round (1005, -3) --risultare: 1000 – Sameer
Una soluzione generica: utilizzare MOD per trovare l'ultimo 100 ° posto e quindi aggiungere 100 al risultato.
select (720 - MOD(720,100)) + 100 from dual;
Se è necessario il prossimo 80 ° posto, basta sostituire qualsiasi "100" con "80".
C'è un problema con questa formula quando il valore di input è già un multiplo di 100. 'select (800 - (800% 100)) + 100;' darà 900 anziché 800. – Gyromite
Prova questo:
selezionare round (@value, -2);
Questo non sempre arrotonda * SU *, come specificato nella domanda. Ad esempio 'select round (129.0, -2);' restituisce 100 invece di 200. – Gyromite
è molto semplice per arrotondare un numero a qualsiasi multiplo di più vicino 10 utilizzando semplicemente la funzione ROUND
es:
SELECT ROUND(number/1000,2)*1000
Questo vi darà il valore millesimo.
Oltre a Gray's risposta, userei la seguente funzione inline:
CREATE FUNCTION dbo.udf_RoundNearest
(
@Number bigint,
@RoundNearest bigint,
@Direction int
)
RETURNS TABLE AS
RETURN
SELECT CASE WHEN @RoundNearest>[email protected] THEN @Number
ELSE
(
(@Number + CASE
WHEN @Direction = 0 --Round Down
THEN 0
ELSE CASE WHEN @Number % @RoundNearest = 0 THEN 0 ELSE @RoundNearest END
END)/@RoundNearest) * @RoundNearest
END Number
Parametro Definizione:
utilizzando la funzione di:
SELECT * FROM dbo.udf_RoundNearest (1965,100,1) --> 2000
SELECT * FROM dbo.udf_RoundNearest (1359,100,0) --> 1300
SELECT * FROM dbo.udf_RoundNearest (1999,10,0) --1990
SELECT * FROM dbo.udf_RoundNearest (80,100,0) --> 80 (if the @number parameter is less or equal the @RoundNearest parameter the result will be the @number itself
può essere utilizzato anche come applicarla contro un tavolo come ad esempio:
;with tmp (Value) as
(select 1236 union all select 6584 union all select 9999)
select t.*, fn.Number
from tmp t
cross apply dbo.udf_RoundNearest (Value,100,0) fn
/*Result Set
Value Number
1236 1200
6584 6500
9999 9900*/
Ho bisogno di qualcosa se C# fa la stessa cosa, e la formula sopra funziona bene. L'unico piccolo problema è che non funziona se X è un negativo. Il modo in cui l'ho risolto (non completamente sicuro della sintassi SQL, ma dovrebbe essere facile da capire) era assicurarsi che X fosse sempre positivo (Abs (X)) e quindi moltiplicare per -100. –
Mi dispiace dirlo, ma questa risposta sembra funzionare solo per valori interi. X = 100.25 restituisce 100 invece di arrotondare a 200. @ La risposta del soffitto di Krock funziona meglio per i galleggianti e i decimali – bmadtiger