2012-07-03 5 views
5

У меня есть класс с десятичным свойством & Я сериализую & десериализации с использованием JSON.NET. Проблема, с которой я столкнулась, заключается в том, что если сказать десятичное значение 100000000000023063.0, когда я десериализую, он преобразуется в 100000000000023000. Я проверил JSON &, это определенно записано как 100000000000023063.0.Проблемы с десятичной сериализацией .NET/C#

Я посмотрел в него &

decimal.Parse("100000000000023063.0") 

=

100000000000023063.0 

но

var d = (decimal)100000000000023063.0 

=

100000000000023000 

Я могу обойти эту проблему, сохраняя в качестве строки & свойство, которое делает decimal.Parse(), но кто-нибудь знает, почему это происходит?

ответ

12

Это потому, что 100000000000023063.0 является константой double, которую вы затем конвертируете в decimal, и точность теряется.

написать это вместо:

var d = 100000000000023063.0M; 

Суффикс M говорит C# компилятор, что число является decimal постоянным.

На самом деле вам даже не нужен десятичный разделитель для этого - то есть 1M == 1.0M, и оба они - decimal.

+0

Спасибо много для этого. Я получаю значение «100000000000023063.0» в XML через веб-службу. Затем я разбираю его и создаю свой класс и сериализую класс, используя JSON.NET и сохраняю его в базе данных для дальнейшего использования. Похоже, что JSON.NET 4.0 исправляет проблему с десятичной точностью. – LozzaDude

1

Это происходит потому, что вы бросаете двойным Десятичное тогда вы должны быть определения значения в качестве десятичного: т.е.

var q = 100000000000023063.0M; 

Суффикс M указывает на то, что числовая константа имеет тип Decimal

Смежные вопросы