我反序列化十进制值时遇到问题。
JObject.Parse("{\"available\":8777.831438322572000}")
如果我在VS下的调试器中键入此代码,则结果为
"available": 8777.8314383225716
如果我尝试这个
obj.Value<decimal>("available")
结果是8777.83143832257
我在哪里错了? 我应该使用哪种api方法来获得正确的结果?
答案 0 :(得分:3)
JObject.Parse("{\"available\":8777.831438322572000}")
的结果为double
。第二条语句的结果为decimal
。
double
具有浮点精度,不如decimal
那样精确。
答案 1 :(得分:2)
我发现此问题与以目标类型为参数的方法无关。在无类型版本方法的情况下,有一个设置可以更改json.net使用小数分隔符对待字符串的方式。 JsonReader.FloatParseHandling
的默认值为FloatParseHandling.Double
就我而言,获得正确结果的方法是:
JObject.Load(new JsonTextReader(new StringReader(value)) { FloatParseHandling = FloatParseHandling.Decimal }, null)
JsonSerializer
和JsonSerializerSettings
包含相同的设置。