首页 > 解决方案 > 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; }
    }
}

标签: c#json.netserializationdouble

解决方案


重要的是要弄清楚doublewith 值99.6 不存在,也从未存在过。你想象的。在你编译它的那一刻,它就被四舍五入了。由于浮点的工作方式,根本不可能在浮点算术中表示确切的值。序列化程序已正确序列化存在的实际值99.6

如果您想以人类倾向于认为的方式表示谨慎的值- 使用decimal而不是浮点 ( float, double)。它(decimal_ _

坦率地说,在您考虑“确切值”的那一刻:浮点不是一个好的选择。


推荐阅读