2
JavaScript转换C#数值精度损失
当使用带MessagePack的SignalR在JavaScript和C#之间对值进行序列化和反序列化时,在接收端C#中会看到一些精度损失。 作为示例,我将值0.005从JavaScript发送到C#。当反序列化的值出现在C#端时,我得到的0.004999999888241291是接近的值,但不是精确的0.005。JavaScript端的值是Number,我正在使用的C#端的值double。 我已经读过JavaScript不能完全表示浮点数,这会导致类似的结果0.1 + 0.2 == 0.30000000000000004。我怀疑我看到的问题与JavaScript的此功能有关。 有趣的是,我没有看到相同的问题。从C#向JavaScript发送0.005会在JavaScript中产生0.005的值。 编辑:从C#的值只是在JS调试器窗口中缩短。正如@Pete所提到的,它确实扩展为不完全为0.5的值(0.005000000000000000104083408558)。这意味着差异至少发生在双方。 JSON序列化没有相同的问题,因为我假设它通过字符串传递,从而使接收环境留在控件中,从而将值解析为其原始数值类型。 我想知道是否有一种使用二进制序列化的方法来在两端都具有匹配的值。 如果不是,这是否意味着无法在JavaScript和C#之间进行100%准确的二进制转换? 使用的技术: 的JavaScript 带有SignalR和msgpack5的.Net Core 我的代码基于这篇文章。唯一的区别是我正在使用ContractlessStandardResolver.Instance。