C# Json.NET十进制精度损失
我对反序列化十进制值有问题C# Json.NET十进制精度损失,c#,json.net,decimal,linq-to-json,C#,Json.net,Decimal,Linq To Json,我对反序列化十进制值有问题 JObject.Parse("{\"available\":8777.831438322572000}") 如果我在VS调试器下键入此代码,结果是 "available": 8777.8314383225716 如果我试试这个 obj.Value<decimal>("available") obj.Value(“可用”) 结果是8777.83143832257 我错在哪里? 我应该使用什么api方法来获得正确的结果?JObject.Parse(“{
JObject.Parse("{\"available\":8777.831438322572000}")
如果我在VS调试器下键入此代码,结果是
"available": 8777.8314383225716
如果我试试这个
obj.Value<decimal>("available")
obj.Value(“可用”)
结果是8777.83143832257
我错在哪里?
我应该使用什么api方法来获得正确的结果?JObject.Parse(“{\”available\”:8777.831438257000}”)的结果是
双精度的。第二条语句产生一个十进制
双精度
具有浮点精度,其精度不如十进制
必读:我发现这个问题与以目标类型为参数的方法无关。对于非类型化版本方法,有一个设置允许更改json.net使用十进制分隔符处理字符串的方式JsonReader.FloatParseHandling
默认值为FloatParseHandling.Double
就我而言,获得正确结果的方法是:
JObject.Load(new JsonTextReader(new StringReader(value)) { FloatParseHandling = FloatParseHandling.Decimal }, null)
JsonSerializer
和JsonSerializerSettings
包含相同的设置。可能重复的设置可能需要使用
语句将JsonTextReader
和StringReader
括在中。实际上,这对于StringReader
来说并不重要,但对于StreamReader
来说则是一个问题。