Problema función Round

30/11/2007 - 13:24 por Marcos Molero | Informe spam
saludos,

tengo un problema con la función round, y es que no esta redondeando como se
debe en ciertos números, por ejemplo:

declare @valor float

select @valor=round(123.323,2)
select @valor

Devuelve: 123.319999999
Cuando el resultado correcto debería ser: 123.32

La función devuelve el resultado correcto cuando se redondea por encima de 5:

declare @valor float

select @valor=round(123.326,2)
select @valor

Devuelve: 123.33

Cómo debo hacer para obtener el resultado deseado?

Preguntas similare

Leer las respuestas

#1 Maxi
30/11/2007 - 14:18 | Informe spam
Marcos, este no es un problema de la funcion Round sino del tipo de datos
que usted ha seleccionado (Float)

Mire este ejemplo que le paso

declare @valor decimal(18,2)

select @valor=round(123.323,2)
select @valor


Acerca del tipo de datos Float:

float and real
Approximate number data types for use with floating point numeric data.
Floating point data is approximate; not all values in the data type range
can be precisely represented.



-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Marcos Molero" escribió en el
mensaje news:
saludos,

tengo un problema con la función round, y es que no esta redondeando como
se
debe en ciertos números, por ejemplo:

declare @valor float

select @valor=round(123.323,2)
select @valor

Devuelve: 123.319999999
Cuando el resultado correcto debería ser: 123.32

La función devuelve el resultado correcto cuando se redondea por encima de
5:

declare @valor float

select @valor=round(123.326,2)
select @valor

Devuelve: 123.33

Cómo debo hacer para obtener el resultado deseado?
Respuesta Responder a este mensaje
#2 Marcos Molero
30/11/2007 - 20:29 | Informe spam
Es correcto, con el tipo de datos decimal la función Round muestra los
valores adecuados,

Ahora bien, tengo una columna con el tipo de datos float, los datos de esa
columna debo dividirlos entre 1000 y redondear a 2 decimales. Cómo podría
hacer para conseguir el redondeo correcto con el tipo de datos float?

muchas gracias,

"Maxi" wrote:

Marcos, este no es un problema de la funcion Round sino del tipo de datos
que usted ha seleccionado (Float)

Mire este ejemplo que le paso

declare @valor decimal(18,2)

select @valor=round(123.323,2)
select @valor


Acerca del tipo de datos Float:

float and real
Approximate number data types for use with floating point numeric data.
Floating point data is approximate; not all values in the data type range
can be precisely represented.



-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Marcos Molero" escribió en el
mensaje news:
> saludos,
>
> tengo un problema con la función round, y es que no esta redondeando como
> se
> debe en ciertos números, por ejemplo:
>
> declare @valor float
>
> select @valor=round(123.323,2)
> select @valor
>
> Devuelve: 123.319999999
> Cuando el resultado correcto debería ser: 123.32
>
> La función devuelve el resultado correcto cuando se redondea por encima de
> 5:
>
> declare @valor float
>
> select @valor=round(123.326,2)
> select @valor
>
> Devuelve: 123.33
>
> Cómo debo hacer para obtener el resultado deseado?



Respuesta Responder a este mensaje
#3 Maxi
30/11/2007 - 21:03 | Informe spam
MArcos, usted ha leido lo que le envie acerca de los datos Float? si usted
usa ese tipo de datos los resultados seran aproximados.


-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Marcos Molero" escribió en el
mensaje news:
Es correcto, con el tipo de datos decimal la función Round muestra los
valores adecuados,

Ahora bien, tengo una columna con el tipo de datos float, los datos de esa
columna debo dividirlos entre 1000 y redondear a 2 decimales. Cómo podría
hacer para conseguir el redondeo correcto con el tipo de datos float?

muchas gracias,

"Maxi" wrote:

Marcos, este no es un problema de la funcion Round sino del tipo de datos
que usted ha seleccionado (Float)

Mire este ejemplo que le paso

declare @valor decimal(18,2)

select @valor=round(123.323,2)
select @valor


Acerca del tipo de datos Float:

float and real
Approximate number data types for use with floating point numeric data.
Floating point data is approximate; not all values in the data type range
can be precisely represented.



-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"Marcos Molero" escribió en el
mensaje news:
> saludos,
>
> tengo un problema con la función round, y es que no esta redondeando
> como
> se
> debe en ciertos números, por ejemplo:
>
> declare @valor float
>
> select @valor=round(123.323,2)
> select @valor
>
> Devuelve: 123.319999999
> Cuando el resultado correcto debería ser: 123.32
>
> La función devuelve el resultado correcto cuando se redondea por encima
> de
> 5:
>
> declare @valor float
>
> select @valor=round(123.326,2)
> select @valor
>
> Devuelve: 123.33
>
> Cómo debo hacer para obtener el resultado deseado?



Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
30/11/2007 - 21:26 | Informe spam
Hola Marcos,

On 30 nov, 20:29, Marcos Molero
wrote:
Es correcto, con el tipo de datos decimal la función Round muestra los
valores adecuados,

Ahora bien, tengo una columna con el tipo de datos float, los datos de esa
columna debo dividirlos entre 1000 y redondear a 2 decimales. Cómo podría
hacer para conseguir el redondeo correcto con el tipo de datos float?




Prueba esto:

cast(floor(@valor / 10 + .5) / 100 as numeric(10,2))

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
30/11/2007 - 21:43 | Informe spam
On 30 nov, 21:26, "Carlos M. Calvelo" wrote:
Hola Marcos,

On 30 nov, 20:29, Marcos Molero

wrote:
> Es correcto, con el tipo de datos decimal la función Round muestra los
> valores adecuados,

> Ahora bien, tengo una columna con el tipo de datos float, los datos de esa
> columna debo dividirlos entre 1000 y redondear a 2 decimales. Cómo podría
> hacer para conseguir el redondeo correcto con el tipo de datos float?

Prueba esto:

cast(floor(@valor / 10 + .5) / 100 as numeric(10,2))




O simplemente:
cast(@valor / 1000 as numeric(10,2))

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