我有一个带小数属性的类&我正在序列化&使用JSON.NET反序列化。我遇到的问题是,如果说十进制值是100000000000023063.0,当我反序列化它转换为100000000000023000.我检查了JSON&它绝对记录为100000000000023063.0。
我已经调查了它&
decimal.Parse("100000000000023063.0")
=
100000000000023063.0
但
var d = (decimal)100000000000023063.0
=
100000000000023000
我可以通过存储为字符串&来解决这个问题。有一个属性decimal.Parse()但有谁知道为什么会发生这种情况?
答案 0 :(得分:12)
这是因为100000000000023063.0
是double
常量,然后您将转换为decimal
,精度会丢失。
这样写:
var d = 100000000000023063.0M;
M
后缀告诉C#编译器该数字是decimal
常量。
实际上你甚至不需要小数分隔符 - 即1M == 1.0M
,而且都是decimal
s。
答案 1 :(得分:1)
这是因为你将一个double转换为Decimal,而你应该将值定义为Decimal:即。
var q = 100000000000023063.0M;
M后缀表示数字常量的类型为Decimal