2012-10-03 198 views
5

tengo un campo calculado 'MiSuma' en la consulta interna cuyo valor después del cálculo es 58.Formato de SQL como Redondear decimales eliminación

que necesito para obtener el 20% de este valor.

Si reparto:

MySum * 20 /100, I get 11 

Si reparto:

((20 * CAST(MySum as decimal(6,2)))/100) , I get 11.60000 

Si reparto

Round(((20 * CAST(MySum as decimal(6,2)))/100), 2), I still get 11.60000 

Quiero que,

Si el resultado viene 11,6, se debería mostrar 12 y si el resultado es 11.4, debería mostrar 11.

Quiero redondear los valores. ¿Alguna función para eso?

Respuesta

22

uso ROUND() (See examples) función en servidor SQL

select round(11.6,0) 

resultado:

12.0 

ex2:

select round(11.4,0) 

resultado:

11.0 

si no desea que la parte decimal, se puede hacer

select cast(round(11.6,0) as int) 
+1

No quiero decimales en absoluto. Me gusta si en vez de Round, uso TECHO. El formato de valor que obtengo en CEILING, lo necesito aquí, pero redondeando los valores. – RMN

+1

@RMN: Consulte la última declaración de selección en mi respuesta –

+0

También funciona con OLEDB. Lo usé en una tabla DBF (foxpro) y funciona sin problemas. –

1
CAST(Round(MySum * 20.0 /100, 0) AS INT) 

FYI

MiSuma * 20/100, me sale 11

Esto es porque cuando los 3 operandos son intercepciones, SQL Server hará realizar operaciones matemáticas de enteros , de izquierda a derecha, truncando todos los resultados intermedios.

58 * 20/100 => 1160/100 => 11 (truncated from 11.6) 

También para el registro ROUND (m, n) devuelve el resultado al n cifras decimales, no figuras n significativas.

+0

Mi error, que no he mencionado.Incluso Round (((20 * CAST (MySum como decimal (6,2)))/100), 0), da 12.00000 pero solo quiero 12, eliminando dígitos después de decimal. – RMN

+0

que hace el 'CAST (como INT)'. – RichardTheKiwi

1

verificación de la función round y de qué manera las obras de argumentos length. Controla el comportamiento de la precisión del resultado

+0

http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx para inglés –

-1
SELECT CONVERT(INT, 11.4) 

RESULTADO: 11

SELECT CONVERT(INT, 11.6) 

RESULTADO: 11

Cuestiones relacionadas