c# - Json.NET 小数精度损失

标签 c# json.net decimal linq-to-json

我在反序列化十进制值时遇到问题。

JObject.Parse("{\"available\":8777.831438322572000}")

如果我在调试器下的 VS 中键入此代码,结果是

"available": 8777.8314383225716

如果我试试这个

obj.Value<decimal>("available")

结果是 8777.83143832257

我哪里错了? 我应该使用哪些 API 方法来获得正确的结果?

最佳答案

我发现这个问题与将目标类型作为参数的方法无关。在无类型版本方法的情况下,有一个设置允许更改 json.net 如何处理带小数点分隔符的字符串。 JsonReader.FloatParseHandling 默认值为 FloatParseHandling.Double 在我的例子中,获得正确结果的方法是:

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

JsonSerializerJsonSerializerSettings 包含相同的设置。

关于c# - Json.NET 小数精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51205166/

相关文章:

c++ - 将二进制补码输出转换为带符号的十进制

c# - 使用静态 NavigateTo<T> 方法在 Xamarin.Forms 中导航时如何传递参数?

c# - Facebook Messenger 中带有按钮的 Microsoft Bot Framework 消息

.net - JSON.net 不包括 EmitDefaultValue 为 false 的空属性

c# - 使用 Newtonsoft JSON.NET 反序列化动态 Json 字符串

django - 将小数字段的默认值设置为 0.00

c# - 如何让屏幕阅读器以类似于读取 Win32 MessageBox 的方式读取我的 WPF 消息?

c# - 如何调整和保存使用 C# 中的文件上传控件上传的图像

c# - 将两个属性反序列化为一个 .NET 属性

c# - 如何在没有多次转换的情况下逐字定义小数数组?