Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Json.NET十进制精度损失_C#_Json.net_Decimal_Linq To Json - Fatal编程技术网

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
来说则是一个问题。