Tipos Decimales

16/01/2007 - 09:58 por Alhambra-Eidos | Informe spam
Hola, tengo una clase de entidad asociada a una tabla de BBDD Informix.

Hay un campo idcalle definido en bbdd como DECIMAL(18,2) NULL.

He creado una propiedad así:

private double? _idcalle;
[DataMember]
public double? idcalle
{
get { return _idcalle;}
set { _idcalle = value;}
}

Quería saber si utilizo double? o mejor decimal?. Qué pasaría en cuanto al
rendimiento de tipos nulables para tipos decimales como decimal o double.

Tenía referencias que conlos doubles .NET tenía fallos de precisión, es
verdad ?

Sé que ha salido el VStudio 2005 sp1, supongo que es recomendable instalarlo
(o no?), pero quería saber si hay noticias de algún .net framework 2.0 sp1
que arregles esos fallos -sin añadir más- por ejemplo el de precisíón de
doubles.

Saludos. Gracias de antemano.

http://www.alhambra-eidos.com/web2005/index.html
 

Leer las respuestas

#1 Alberto Poblacion
16/01/2007 - 10:20 | Informe spam
"Alhambra-Eidos" wrote in message
news:
Hola, tengo una clase de entidad asociada a una tabla de BBDD Informix.

Hay un campo idcalle definido en bbdd como DECIMAL(18,2) NULL.
[...]
Quería saber si utilizo double? o mejor decimal?.



Mejor Decimal, para que respete la exactitud de la cifra de la misma
manera que es precisa en la base de datos.

Qué pasaría en cuanto al
rendimiento de tipos nulables para tipos decimales como decimal o double.



Da igual. El tipo Nullable guarda el tipo original junto con un flag
que dice si tiene valor o no, y funciona igual para cualquier tipo original.

Tenía referencias que conlos doubles .NET tenía fallos de precisión, es
verdad ?



En .Net y en todas partes. Los tipos de coma flotante, en todos los
entornos, no solo en .Net, guardan una mantisa con el valor original
convertido a binario más un exponente que indica el orden de magnitud. La
mantisa tiene un número limitado de bits, con lo que cualquier valor decimal
que al convertirse en binario tenga infinitos bits, será truncado al meterlo
en el double, se perderán los bits menos significativos, y al convertirlo de
vuelta a base 10 no tendrá exactamente el valor del que se partió
originalmente.

La forma de evitar esos problemas de redondeo consiste en usar una
codificación de los valores decimales que no los convierta todos a binario,
sino que convierta uno por uno los dígitos y los guarde separadamente, con
lo que se pueden recuperar con exactitud. Esto es lo que hace el tipo
Decimal en .Net.

Preguntas similares