Manejo de decimales c# y sql

07/03/2008 - 13:42 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?
 

Leer las respuestas

#1 Claudio Quezada
07/03/2008 - 16:55 | Informe spam
Gracias,

si, efectivamente se ingresa 5.2


al final voy a utilizar un redondeo y cast al momento de recuperar el
valor por sql

, ROUND(CONVERT(DECIMAL(10,9), Precio),2) Precio

Gracias de nuevo...



Guillermo 'guille' escribió:
Los famosos redondeos del Double, independientemente de la solución que
te den otros, intenta usar tipos "decimal" y así evitas esos redondeos
"extraños".

Por cierto, en el primer ejemplo, supongo que será "5.2" lo que ingresas
en el textBox.

Preguntas similares