【发布时间】:2020-10-26 07:21:21
【问题描述】:
使用 ruby 的 String#unpack 方法将二进制数据转换为浮点值时,我得到以下结果:
[0x7d, 0xe8, 0x80, 0xc5].map(&:chr).join.unpack('e')[0]
# => -4125.06103515625
这被认为是正确的结果。
使用 C# BitConverter.ToSingle 方法我得到以下结果:
var firstVal = BitConverter.ToSingle(new byte[] {0x7d, 0xe8, 0x80, 0xc5}, 0);
// firstVal: -4125.061
因此,该值似乎以某种方式被截断。
有没有办法从二进制表示中提取正确的值(如ruby 示例)?
【问题讨论】:
-
你是如何打印值的?
-
Console.WriteLine(((double)firstVal).ToString("R"));打印与 ruby 相同的值。
标签: c# floating-point