我有一个带有十进制属性的类,并且正在使用JSON.NET进行序列化和反序列化。我遇到的问题是,如果说十进制值为100000000000023063.0,则在我反序列化时将其转换为100000000000023000。我已经检查了JSON,它的绝对记录为100000000000023063.0。
我已经调查过了&
decimal.Parse("100000000000023063.0")
=
100000000000023063.0
但
var d = (decimal)100000000000023063.0
=
100000000000023000
我可以通过将其存储为字符串并拥有一个执行decimal.Parse()的属性来解决此问题,但是有人知道为什么会这样吗?
最佳答案
这是因为100000000000023063.0
是double
常量,然后您将其转换为decimal
,并且精度会丢失。
改为这样写:
var d = 100000000000023063.0M;
M
后缀告诉C#编译器该数字是decimal
常数。实际上,您甚至不需要十进制分隔符-即
1M == 1.0M
,它们都是decimal
。关于c# - .NET/C#十进制序列化问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11310399/