Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Where am I wrong? What api methods should I use to get correct results?

like image 946
Alew Avatar asked Jan 19 '26 11:01

Alew


1 Answers

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:

JObject.Load(new JsonTextReader(new StringReader(value)) { FloatParseHandling = FloatParseHandling.Decimal }, null)

JsonSerializer and JsonSerializerSettings contain the same setting.

like image 186
Alew Avatar answered Jan 21 '26 00:01

Alew



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!