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

我已经调查过了&

decimal.Parse("100000000000023063.0")

=
100000000000023063.0


var d = (decimal)100000000000023063.0

=
100000000000023000

我可以通过将其存储为字符串并拥有一个执行decimal.Parse()的属性来解决此问题,但是有人知道为什么会这样吗?

最佳答案

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

改为这样写:

var d = 100000000000023063.0M;
M后缀告诉C#编译器该数字是decimal常数。

实际上,您甚至不需要十进制分隔符-即1M == 1.0M,它们都是decimal

关于c# - .NET/C#十进制序列化问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11310399/

10-13 08:09