Json.NET decimal precision loss

Multi tool use
Json.NET decimal precision loss
I have an issue with deserializing decimal value.
JObject.Parse("{"available":8777.831438322572000}")
If I type this code in VS under debugger the result is
"available": 8777.8314383225716
If I try this
obj.Value<decimal>("available")
the result is 8777.83143832257
8777.83143832257
Where am I wrong?
What api methods should I use to get correct results?
2 Answers
2
The result of JObject.Parse("{"available":8777.831438322572000}")
is a double
. The second statement results in a decimal
.
JObject.Parse("{"available":8777.831438322572000}")
double
decimal
The double
has floating point precision, which is not that precise as a decimal
.
double
decimal
Required reading: Why Floating-Point Numbers May Lose Precision
I find out that this problem doesn't relate to methods which take destination type as an argument. In case of untyped version method there is a setting which allows to change how json.net treats string with decimal separator. JsonReader.FloatParseHandling
default value is FloatParseHandling.Double
In my case the way to get correct results is:
JsonReader.FloatParseHandling
FloatParseHandling.Double
JObject.Load(new JsonTextReader(new StringReader(value)) { FloatParseHandling = FloatParseHandling.Decimal }, null)
JsonSerializer
and JsonSerializerSettings
contain the same setting.
JsonSerializer
JsonSerializerSettings
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
Possible duplicate of Handling decimal values in Newtonsoft.Json
– mjwills
yesterday