2012-07-03 14 views
5

Mam klasę z dziesiętną właściwością & Sformalizuję & deserializacji przy użyciu JSON.NET. Problem polega na tym, że jeśli wartość dziesiętna wynosi 100000000000023063.0, po deserializacji zostanie przekonwertowana na 100000000000023000. Sprawdziłem JSON &, który jest z pewnością zapisany jako 100000000000023063.0..NET/C# problemy z serializacją dziesiętną

Przyjrzeliśmy się to &

decimal.Parse("100000000000023063.0") 

=

100000000000023063.0 

ale

var d = (decimal)100000000000023063.0 

=

100000000000023000 

Mogę obejść ten problem, przechowując jako ciąg & mieć właściwość, która nie decimal.Parse(), ale czy ktoś wie, dlaczego tak się dzieje?

Odpowiedz

12

To dlatego, że 100000000000023063.0 to stała double, którą następnie konwertujesz na decimal, a dokładność się gubi.

napisać to tak zamiast:

var d = 100000000000023063.0M; 

M przyrostek informuje kompilator C#, że liczba jest decimal stała.

W rzeczywistości nie potrzebujesz do tego celu separatora dziesiętnego - tj. 1M == 1.0M i oba są decimal s.

+0

Dzięki dużo za to. Otrzymuję wartość "100000000000023063.0" w XML za pośrednictwem usługi internetowej. Następnie parsuję go i tworzę moją klasę i serializuje klasę przy użyciu JSON.NET i przechowuje ją w bazie danych do wykorzystania w przyszłości. Wygląda na to, że JSON.NET 4.0 rozwiązuje problem z dokładnością dziesiętną. – LozzaDude

1

To dlatego, że są odlewy podwójny do dziesiętnej natomiast powinno być zdefiniowanie wartości jako ułamek dziesiętny: tj

var q = 100000000000023063.0M; 

M przyrostka wskazuje, że stała numeryczna jest typu Decimal

Powiązane problemy