duda decimales sql y c#

07/03/2008 - 13:48 por Claudio Quezada | Informe spam
que tal, tengo una duda respecto del manejo de decimales a nivel de c# y
de sql...

resulta que tenemos un sistema que ha estado funcionando a la prefeccion
durante los ultimos 2 años, ahora gente externa ha creado una aplicacion
que ingresa datos a la misma BD de nuestro sistema.

El problema es que ellos ingresa un valor, por ejemplo "2.5" y en la BD
se guarda como "5.1999998926".

Revisando nuestro sistema me doy cuenta que efectivamente se guarda asi
el valor que ingresamos nosotros, ejemplo ingresamos "2.654" y en la BD
se guarda "2.6539999999999999" cuando se procesa esto en nuestro codigo
se toma de la siguiente manera:

public double Precio = Convert.ToDouble(txtPrecio.Text);

luego eso se pasa por procedimiento almacenado a la BD y según el
profiler de sql llega asi: "2.654000000000000e+000"

cuando lo recupero lo hago de la siguiente forma
if(mRow["Precio"]!ÛNull.Value)mPrecio=Convert.ToDouble(mRow["Precio"]);

y lo despliego así:

txtPrecio.Text = mPrecio.ToString();

Esto ha funcionado, como dije anteriormente, por dos años y sin ningun
problema.

Mi duda es, esto es correcto? nuestro sistema esta mal? o es que el
"nuevo" sistema es el que no esta haciendo la conversion como
corresponde?, acaso hay que configurar algo para que tome esto como
corresponde?

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
07/03/2008 - 15:43 | Informe spam
Cuál es el tipo de datos SQL Server usado para almacenar el valor?

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Claudio Quezada" wrote:

Mostrar la cita
#2 Claudio Quezada
07/03/2008 - 15:52 | Informe spam
float(8)

info del sp_help:
Column_name Precio
Type float
Computed no
Length 8
Prec 53
Scale NULL
Nullable yes
TrimTrailingBlanks (n/a)
FixedLenNullInSource (n/a)
Collation NULL

gracias.

Gux (MVP) escribió:
Mostrar la cita
#3 Gux (MVP)
07/03/2008 - 19:30 | Informe spam
Normalmente las equivalencias de tipos recomendadas son:

Sql Server Float = System.Data.SqlTypes.SqlDouble = .NET Double

Sql Server Real = System.Data.SqlTypes.SqlSingle = .NET Single

Con esas equivalencias no debería tener problema alguno en el almacenamiento
de números flotantes y reales.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Claudio Quezada" wrote:

Mostrar la cita
#4 Claudio Quezada
07/03/2008 - 20:26 | Informe spam
Gracias.

Gux (MVP) escribió:
Mostrar la cita
#5 Roka
07/03/2008 - 20:46 | Informe spam
si lo recibes en un store procedure, contrólalo con el tamaño que le pones
al parámetro recibido,
aunque lo ideal es que el parámetro sea igual al campo de la tabla.

Róger


"Claudio Quezada" wrote in message
news:OO%
Mostrar la cita
Ads by Google
Search Busqueda sugerida