Estoy tratando de determinar la mejor manera de truncar o soltar lugares decimales adicionales en SQL sin redondear. Por ejemplo:
declare @value decimal(18,2)
set @value = 123.456
Esto se redondeará automáticamente @value
para ser 123.46
, lo cual es bueno en la mayoría de los casos. Sin embargo, para este proyecto, no necesito eso. ¿Hay una manera simple de truncar los decimales que no necesito? Sé que puedo usar la left()
función y volver a convertir a un decimal. ¿Hay otras maneras?
sql
sql-server
tsql
rounding
Ryan Eastabrook
fuente
fuente
Cuando el tercer parámetro ! = 0 se trunca en lugar de redondear
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Sintaxis
Argumentos
numeric_expression
Es una expresión de la categoría de tipo de datos numérico exacto o aproximado, excepto el tipo de datos de bit.length
Es la precisión a la que se debe redondear numeric_expression. length debe ser una expresión de tipo tinyint, smallint o int. Cuando la longitud es un número positivo, numeric_expression se redondea al número de posiciones decimales especificadas por la longitud. Cuando la longitud es un número negativo, numeric_expression se redondea en el lado izquierdo del punto decimal, según lo especificado por la longitud.function
Es el tipo de operación a realizar. la función debe ser tinyint, smallint o int. Cuando se omite la función o tiene un valor de 0 (predeterminado), numeric_expression se redondea. Cuando se especifica un valor distinto de 0, numeric_expression se trunca.fuente
fuente
Esta es la forma en que pude truncar y no redondear:
devuelve 100.0010
Y tu ejemplo:
devuelve 123.450
Ahora, si quieres deshacerte del cero final, simplemente lánzalo:
devuelve 123.45
fuente
En realidad, sea cual sea el tercer parámetro, 0 o 1 o 2, no redondeará su valor.
fuente
Round tiene un parámetro opcional
fuente
¿Quieres el decimal o no?
Si no, use
Si lo haces con 0, haz una ronda:
fuente
Otro truncado sin solución de redondeo y ejemplo.
fuente
Floor()
cual es el camino a seguir para soltar decimales sin redondear de hecho. Lástima que Floor () no tenga un segundo parámetro para indicar en qué posición. Pero creo que el * 10) / 10 funciona bastante bien alrededor de esto.Esto eliminará la parte decimal de cualquier número.
fuente
Te daría 2 valores después del punto decimal. (SERVIDOR MS SQL)
fuente
Otra forma es la
ODBC TRUNCATE
función:LiveDemo
Salida:
Observación:
Recomiendo usar la
ROUND
función incorporada con el tercer parámetro configurado en 1.fuente
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).
Su ejemplo:
devuelve 123.45
Ajustará automáticamente el redondeo al valor correcto que está buscando.
Por cierto, ¿estás recreando el programa de la película Office Space?
fuente
Intente utilizar este código para convertir 3 valores decimales después de un punto en 2 decimales:
La salida es 123.46
fuente
Creo que solo quieres el valor decimal, en este caso puedes usar lo siguiente:
fuente
Sé que esta pregunta es muy antigua, pero nadie usó subcadenas para redondear. Esto como ventaja es la capacidad de redondear números realmente largos (límite de su cadena en el servidor SQL que generalmente es de 8000 caracteres):
fuente
Creo que podemos ser mucho más fáciles con una solución de ejemplo más simple que se encuentra en Hackerrank:
La solución anterior le da una idea de cómo limitar el valor a 4 puntos decimales. Si desea bajar o subir los números después del decimal, simplemente cambie 4 a lo que quiera.
fuente
Mod(x,1)
Es la forma más fácil que pienso.fuente
fuente