Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Arrotondamento per difetto di numeri decimali in SQL Server 2008

1) select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) gestisce il primo caso, per gentile concessione di una risposta a una domanda simile nei forum di SQL Server , che ho adattato e verificato rapidamente.

Nota che se i numeri stai arrotondando al 0.5 più vicino potrebbe essere più grande (ad es. 333.69 => 333.5 ), assicurati di specificare più decimal precisione durante la trasmissione (ad es. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ), oppure potresti ricevere un errore di overflow:

Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.

La precisione extra non influirà sul risultato finale (ad es. select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) e select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) entrambi producono 3.5 ); ma è uno spreco se i numeri che stai arrotondando saranno sempre più piccoli.

Sono disponibili riferimenti online con esempi per T-SQL FLOOR , CAST e decimal per aiutare.

2) select ROUND(142600, -3) gestisce il secondo caso.

Un riferimento online simile è disponibile per T-SQL ROUND .