decimales de mas

03/12/2009 - 23:10 por Luis Mata | Informe spam
hola

Porque esto en un select : round(total*3.2,2)

arroja: 3462.4000000

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
04/12/2009 - 09:45 | Informe spam
No hay decimales de más. ROUND no hace más que redondear al número con la
precisión que tú le indicas, pero no cambia la escala del número resultante.

Echa un vistazo al resultado de total*3.2. Ese es el número que ROUND trata
y que redondea al valor que le indicas. Pero si lo que necesitas es que no
muestre tantos decimales, tendrás que convertir el valor resultante de esa
operación al tipo de dato que necesites.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Luis Mata" wrote in message
news:
hola

Porque esto en un select : round(total*3.2,2)

arroja: 3462.4000000


Respuesta Responder a este mensaje
#2 Alejandro Mesa
04/12/2009 - 14:40 | Informe spam
Luis,

Exactamente como indica Carlos. Cuando multiplicamos dos decimales, SQL
Server usa una formula para determinar la precision y escala del resultado.

Precision, Scale, and Length (Transact-SQL)
http://msdn.microsoft.com/en-us/lib...90476.aspx

La funcion "round" se aplicara al resultado, y esta no determina el numero
de decimales del resultado sino que redondea hasta la posicion indicada.

DECLARE @total numeric(11, 6);
SET @total = 1120.13;
SELECT
@total * 3.2 AS [result],
ROUND(@total * 3.2, 2) AS [round],
SQL_VARIANT_PROPERTY(c1, 'BaseType') AS [BaseType],
SQL_VARIANT_PROPERTY(c1, 'Precision') AS [Precision],
SQL_VARIANT_PROPERTY(c1, 'Scale') AS [Scale]
FROM
(SELECT CAST(@total * 3.2 AS sql_variant)) AS T(c1);
GO


AMB


"Luis Mata" wrote:

hola

Porque esto en un select : round(total*3.2,2)

arroja: 3462.4000000


.

Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
04/12/2009 - 21:34 | Informe spam
On 3 dec, 23:10, "Luis Mata" wrote:
hola

Porque esto en un select : round(total*3.2,2)

arroja: 3462.4000000



Luis,

Haciendo una conversión el round es implícito.

Por ejemplo:

select
cast(1.493 as numeric(14,2)) round3,
cast(1.494 as numeric(14,2)) round4,
cast(1.495 as numeric(14,2)) round5,
cast(1.496 as numeric(14,2)) round6

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida