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



我有一个带有十进制属性的类,我正在使用 JSON.NET 进行序列化和反序列化。我遇到的问题是,如果说十进制值是 100000000000023063.0 ,当我反序列化时,它会转换为 100000000000023000。我已经检查了JSON,它肯定记录为100000000000023063.0。

我已经调查过了

decimal.Parse("100000000000023063.0")

=

100000000000023063.0

var d = (decimal)100000000000023063.0

=

100000000000023000

我可以通过存储为字符串并拥有一个十进制的属性来解决这个问题。Parse() 但是有谁知道为什么会这样?

这是因为100000000000023063.0是一个double常数,然后你将其转换为decimal,并且精度正在丢失。

改为这样写:

var d = 100000000000023063.0M;

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

实际上,您甚至不需要小数点分隔符 - 即 1M == 1.0M,两者都是decimal

这是因为您将双精度转换为十进制,而您应该将值定义为小数:即

var q = 100000000000023063.0M;

M 后缀表示数字常量的类型为十进制

相关内容

  • 没有找到相关文章