select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) maneja el primer caso, cortesía de una respuesta a una pregunta similar en los foros de SQL Server
, que adapté y verifiqué rápidamente.
Tenga en cuenta que si los números que está redondeando al 0.5 más cercano podría ser mayor (por ejemplo, 333.69 => 333.5 ), asegúrese de especificar más decimal precisión al lanzar (por ejemplo, select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) ), o podría recibir un error de desbordamiento:
Msg 8115, Level 16, State 8, Line 1
Arithmetic overflow error converting numeric to data type numeric.
La precisión adicional no afectará el resultado final (es decir, select CAST(FLOOR(2 * 3.69) / 2 AS decimal(10, 1)) y select CAST(FLOOR(2 * 3.69) / 2 AS decimal(2, 1)) ambos producen 3.5 ); pero es un desperdicio si los números que está redondeando siempre serán más pequeños.
Las referencias en línea con ejemplos están disponibles para T-SQL FLOOR
, CAST
y decimal
para ayudar.
select ROUND(142600, -3) maneja el segundo caso.
Una referencia en línea similar está disponible para T-SQL ROUND
.