round redondear quitar hacia entero ejemplos decimals decimales arriba abajo sql-server sql-server-2008 division rounding

sql-server - redondear - sql round up



¿Cómo obtener un resultado flotante dividiendo dos valores enteros? (8)

Utilizar esta

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

Aquí en este sql, primero conviértase en flotar o multiplique por 1.00. La salida será un número flotante. Aquí considero dos decimales. Puedes elegir lo que necesitas.

Me gustaría especificar el número de dígitos decimales cuando hago una división entre 2 números enteros como:

select 1/3

Eso actualmente devuelve 0 . Me gustaría que devuelva 0,33 .

Algo como:

select round(1/3, -2)

Pero eso no funciona. ¿Cómo puedo lograr el resultado deseado?


Las sugerencias de stb y xiowl están bien si estás buscando una constante. Si necesita usar campos o parámetros existentes que sean enteros, primero puede convertirlos en flotantes:

SELECT CAST(1 AS float) / CAST(3 AS float)

o

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)


No es necesario echarles a ambos. El tipo de datos de resultado para una división es siempre el que tiene mayor precedencia de tipo de datos . Por lo tanto, la solución debe ser:

SELECT CAST(1 AS float) / 3

o

SELECT 1 / CAST(3 AS float)


Parece que este truco funciona en SQL Server y es más corto (basado en respuestas anteriores)

SELECT 1.0*MyInt1/MyInt2

O:

SELECT (1.0*MyInt1)/MyInt2


Podría ser un poco tarde, pero tenga en cuenta que CAST ing no está permitido en MySQL y generará un error cuando intente CAST(1 AS float) como se indica en MySQL dev .

La solución a esto es simple en MySQL. Solo haz

(1 + 0.0)

Luego use ROUND para alcanzar un número específico de decimales como este:

ROUND((1+0.0)/(2+0.0), 3)

El SQL anterior divide 1 por 2 y devuelve un flotante a 3 decimales, ya que sería 0.500 .


Porque SQL Server realiza una división de enteros. Prueba esto:

select 1 * 1.0 / 3

Esto es útil cuando pasa enteros como params.

select x * 1.0 / y


Si vino aquí (al igual que yo) para encontrar la solución para el valor entero , aquí está la respuesta:

CAST(9/2 AS UNSIGNED)

devuelve 5


utilizar

select 1/3.0

Esto hará el trabajo.