.NET / C#十进制序列化问题

时间:2012-07-03 11:57:26

标签: c# .net json.net

我有一个带小数属性的类&我正在序列化&使用JSON.NET反序列化。我遇到的问题是,如果说十进制值是100000000000023063.0,当我反序列化它转换为100000000000023000.我检查了JSON&它绝对记录为100000000000023063.0。

我已经调查了它&

decimal.Parse("100000000000023063.0")

=

100000000000023063.0

var d = (decimal)100000000000023063.0

=

100000000000023000

我可以通过存储为字符串&来解决这个问题。有一个属性decimal.Parse()但有谁知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:12)

这是因为100000000000023063.0double常量,然后您将转换为decimal,精度会丢失。

这样写:

var d = 100000000000023063.0M;

M后缀告诉C#编译器该数字是decimal常量。

实际上你甚至不需要小数分隔符 - 即1M == 1.0M,而且都是decimal s。

答案 1 :(得分:1)

这是因为你将一个double转换为Decimal,而你应该将值定义为Decimal:即。

var q = 100000000000023063.0M;

M后缀表示数字常量的类型为Decimal