redondear - sql server round 2 decimals
Lugares decimales truncados(no redondos) en SQL Server (16)
¿Quieres el decimal o no?
Si no, usa
select ceiling(@value),floor(@value)
Si lo haces con 0, entonces haz una ronda:
select round(@value,2)
Estoy tratando de determinar la mejor manera de truncar o eliminar decimales adicionales en SQL sin redondear. Por ejemplo:
declare @value decimal(18,2)
set @value = 123.456
Esto redondeará automáticamente @Value para que sea 123.46 .... que en la mayoría de los casos es bueno. Sin embargo, para este proyecto no necesito eso. ¿Hay una manera simple de truncar los decimales que no necesito? Sé que puedo usar la función left () y convertir de nuevo a un decimal ... de alguna otra manera?
Creo que solo quieres el valor decimal, en este caso puedes usar lo siguiente:
declare @val decimal (8, 3)
SET @val = 123.456
SELECT @val - ROUND(@val,0,1)
En realidad, sea cual sea el tercer parámetro, 0, 1 o 2, no redondeará su valor.
CAST(ROUND(10.0055,2,0) AS NUMERIC(10,2))
Esta es la forma en que pude truncar y no redondear:
select 100.0019-(100.0019%.001)
devuelve 100.0010
Y tu ejemplo:
select 123.456-(123.456%.001)
devuelve 123.450
Ahora, si quieres deshacerte del cero final, simplemente cállalo:
select cast((123.456-(123.456%.001)) as decimal (18,2))
devuelve 123.45
Esto eliminará la parte decimal de cualquier número
SELECT ROUND(@val,0,1)
Intente utilizar este código para convertir 3 valores decimales después de un punto en 2 decimales:
declare @val decimal (8, 2)
select @val = 123.456
select @val = @val
select @val
El resultado es 123.46
Otra forma es la función ODBC TRUNCATE
:
DECLARE @value DECIMAL(18,3) =123.456;
SELECT @value AS val, {fn TRUNCATE(@value, 2)} AS result
Salida:
╔═════════╦═════════╗
║ val ║ result ║
╠═════════╬═════════╣
║ 123,456 ║ 123,450 ║
╚═════════╩═════════╝
Observación:
Recomiendo usar la función ROUND
incorporada con el 3er parámetro establecido en 1.
Otro truncado sin solución de redondeo y ejemplo.
Convert 71.950005666 to a single decimal place number (71.9)
1) 71.950005666 * 10.0 = 719.50005666
2) Floor(719.50005666) = 719.0
3) 719.0 / 10.0 = 71.9
select Floor(71.950005666 * 10.0) / 10.0
Round tiene un parámetro opcional
Select round(123.456, 2, 1) will = 123.45
Select round(123.456, 2, 0) will = 123.46
Sé que esta pregunta es muy antigua, pero nadie usó cadenas secundarias para redondear. Esto como ventaja la capacidad de redondear números realmente largos (límite de su cadena en el servidor SQL que suele ser de 8000 caracteres):
SUBSTRING(''123.456'', 1, CHARINDEX(''.'', ''123.456'') + 2)
Sé que esto es bastante tarde, pero no lo veo como una respuesta y he estado usando este truco durante años.
Simplemente reste .005 de su valor y use Round (@ num, 2).
Tu ejemplo:
declare @num decimal(9,5) = 123.456
select round(@num-.005,2)
devuelve 123.45
Automáticamente ajustará el redondeo al valor correcto que está buscando.
Por cierto, ¿estás recreando el programa de la película Office Space?
Mod(x,1)
es la manera más fácil que pienso.
ROUND ( 123.456 , 2 , 1 )
Cuando el tercer parámetro ! = 0 , trunca en lugar de redondear
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Sintaxis
ROUND (numeric_expression, length [, function])
Argumentos
numeric_expression Es una expresión de la categoría de tipo de datos numéricos exactos o aproximados numéricos, a excepción del tipo de datos de bit.
length Es la precisión a la que debe redondearse numeric_expression. length debe ser una expresión de tipo tinyint, smallint o int. Cuando length es un número positivo, numeric_expression se redondea al número de posiciones decimales especificado por la longitud. Cuando length es un número negativo, numeric_expression se redondea en el lado izquierdo del punto decimal, según lo especificado por la longitud.
- función Es el tipo de operación a realizar. la función debe ser tinyint, smallint o int. Cuando la función se omite o tiene un valor de 0 (predeterminado), numeric_expression se redondea. Cuando se especifica un valor distinto de 0, numeric_expression se trunca.
SELECT Cast(Round(123.456,2,1) as decimal(18,2))
select convert(int,@value)
select round(123.456, 2, 1)