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?
 

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:

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 similares