【发布时间】:2020-11-26 14:30:36
【问题描述】:
在从 dotnet core 2.2 升级到 dotnet 5.0 时,我们遇到了失败的测试,这些测试依赖于对象的一致序列化来生成哈希。我已经将此追踪到当传递给 JsonSerializer.Serialize 方法时双精度类型被序列化的方式。在序列化过程中,我们似乎会丢失精度,其中双精度数舍入到下一个小数点,但并非每个数字都被舍入。
例如
var d = 50.494329039350461;
var dAsText = System.Text.Json.JsonSerializer.Serialize(d);
//Value of dAsText is 50.49432903935046
当我们反序列化时,我们会取回原始数字,但我们需要对序列化数据进行操作以生成我们的哈希。为什么这种行为在框架之间发生了变化,是错误还是有意为之?是否有任何设置我们可以更改以恢复以前的实现(当然保留在 .net 5 上)。使用 Newtonsoft Json 可以看到相同的行为(我也向他们提出了问题)
在 Windows 10x64 和 Lunix Docker 映像中的行为似乎一致。这是在 Visual Studio 2019 中运行的(最新更新)
这些数字也可以看出问题:
50.494328391915907 30.316339899700989 50.494128852095287
【问题讨论】:
标签: c# formatting rounding .net-5