Json.NET小数精度损失
Json.NET decimal precision loss
我在反序列化十进制值时遇到问题。
JObject.Parse("{\"available\":8777.831438322572000}")
如果我在调试器下的 VS 中键入此代码,结果是
"available": 8777.8314383225716
如果我试试这个
obj.Value<decimal>("available")
结果是8777.83143832257
我哪里错了?
我应该使用什么 api 方法来获得正确的结果?
JObject.Parse("{\"available\":8777.831438322572000}")
的结果是 double
。第二条语句导致 decimal
.
double
具有浮点精度,不如 decimal
精确。
我发现这个问题与将目标类型作为参数的方法无关。在无类型版本方法的情况下,有一个设置允许更改 json.net 如何处理带小数点分隔符的字符串。 JsonReader.FloatParseHandling
默认值为 FloatParseHandling.Double
在我的例子中,获得正确结果的方法是:
JObject.Load(new JsonTextReader(new StringReader(value)) { FloatParseHandling = FloatParseHandling.Decimal }, null)
JsonSerializer
和 JsonSerializerSettings
包含相同的设置。
我在反序列化十进制值时遇到问题。
JObject.Parse("{\"available\":8777.831438322572000}")
如果我在调试器下的 VS 中键入此代码,结果是
"available": 8777.8314383225716
如果我试试这个
obj.Value<decimal>("available")
结果是8777.83143832257
我哪里错了? 我应该使用什么 api 方法来获得正确的结果?
JObject.Parse("{\"available\":8777.831438322572000}")
的结果是 double
。第二条语句导致 decimal
.
double
具有浮点精度,不如 decimal
精确。
我发现这个问题与将目标类型作为参数的方法无关。在无类型版本方法的情况下,有一个设置允许更改 json.net 如何处理带小数点分隔符的字符串。 JsonReader.FloatParseHandling
默认值为 FloatParseHandling.Double
在我的例子中,获得正确结果的方法是:
JObject.Load(new JsonTextReader(new StringReader(value)) { FloatParseHandling = FloatParseHandling.Decimal }, null)
JsonSerializer
和 JsonSerializerSettings
包含相同的设置。