我有一个带有十进制属性的类,我正在使用 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 后缀表示数字常量的类型为十进制