2012-07-03 9 views
5

Tengo una clase con una propiedad decimal & Estoy serializando & deserializando usando JSON.NET. El problema que estoy teniendo es que si digo que el valor decimal es 100000000000023063.0, cuando lo deserializo se convierte a 100000000000023000. He comprobado el JSON &, definitivamente está registrado como 100000000000023063.0..NET/C# problemas de serialización decimal

He mirado en él &

decimal.Parse("100000000000023063.0") 

=

100000000000023063.0 

pero

var d = (decimal)100000000000023063.0 

=

100000000000023000 

Puedo solucionar este problema almacenando como una cadena & tengo una propiedad que hace decimal.Parse() pero ¿alguien sabe por qué está sucediendo esto?

Respuesta

12

Es porque 100000000000023063.0 es una constante , que luego está convirtiendo a decimal, y la precisión se está perdiendo.

escritura que esta forma:

var d = 100000000000023063.0M; 

El sufijo M le dice al compilador de C# que el número es una constante decimal.

De hecho, ni siquiera necesita el separador decimal para esto - es decir, 1M == 1.0M y ambos son decimal s.

+0

Gracias mucho por eso. Obtengo el valor "100000000000023063.0" en XML a través de un servicio web. Luego lo analizo y para crear mi clase y serializar la clase usando JSON.NET y almacenarla en una base de datos para referencia futura. Parece que JSON.NET 4.0 corrige el problema con precisión decimal. – LozzaDude

1

Es porque se está proyectando una doble a un decimal, mientras que debería estar definiendo el valor como un decimal: es decir,

var q = 100000000000023063.0M; 

El sufijo M indica que la constante numérica es de tipo decimal

Cuestiones relacionadas