2 .net c# double serialization 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; }
}
}
Run Code Online (Sandbox Code Playgroud)
重要的是要让你的头脑明白,double有价值的东西99.6 不存在,而且从来不存在。你想象出来了。当你编译它的时候它就被四舍五入了。由于浮点的工作原理,根本不可能在浮点算术中表示精确的值。序列化程序已正确序列化存在的实际值。99.6
如果您想以人类倾向于认为的方式表示离散值- 请使用decimal而不是浮点 ( float, double)。它 ( decimal)在精度方面也受到限制(并且它不是 CPU 优化的),但它的近似方式与人类的近似方式更具可比性,并且它可以轻松地描述最常见场景的精确值。
坦率地说,当你考虑“确切的值”时:浮点不是一个好的选择。