c# - C# System.Text.Json 在序列化期间“回合”加倍
问题描述
我使用 System.Text.Json 反序列化一些东西,然后对其进行序列化。问题是,例如双值 99.6 被反序列化,然后序列化为 99.599999999999994。
我能做些什么呢?
这是控制台应用程序中的复制品。
using System;
using System.Text.Json;
namespace ConsolePG3
{
class Program
{
static void Main(string[] args)
{
Person person = new Person { Value = 99.6 };
var text = JsonSerializer.Serialize(person);
Console.WriteLine(text);
Console.ReadLine();
}
}
class Person
{
public double Value { get; set; }
}
}
解决方案
重要的是要弄清楚double
with 值99.6
不存在,也从未存在过。你想象的。在你编译它的那一刻,它就被四舍五入了。由于浮点的工作方式,根本不可能在浮点算术中表示确切的值。序列化程序已正确序列化存在的实际值。99.6
如果您想以人类倾向于认为的方式表示谨慎的值- 使用decimal
而不是浮点 ( float
, double
)。它(decimal
_ _
坦率地说,在您考虑“确切值”的那一刻:浮点不是一个好的选择。
推荐阅读
- java - Java命令提示符中无法识别的cmd windows路径和环境变量
- c# - C# - 显示重复的随机数
- android - 折叠工具栏不与 RecyclerView 折叠
- c# - TaskCompletionSource 永远不会完成
- azure-active-directory - 在 Azure AD 的 SAML 请求中应将颁发者设置为什么
- gitlab - 无法将本地项目推送到 gitlab
- c# - 阅读器循环不适用于字符串中的参数
- php - 检查重复值
- azure-cognitive-search - Azure 搜索服务进入“预配”模式(但没有任何改变)搜索索引已关闭
- algorithm - 用 1 和 0 填充 n*n 数组