C#中的Hex到Float转换

时间:2013-11-07 01:14:15

标签: c# floating-point precision

我有一个想要转换为float的十六进制值0x492655FE。我的代码是

uint num = uint.Parse(hexString, System.Globalization.NumberStyles.AllowHexSpecifier);
byte[] floatVals = BitConverter.GetBytes(num);
BitConverter.ToSingle(floatVals, 0).Dump();

结果:681311,9

但是在ModbusPoll程序中:显示浮动反转结果:681311,8750

我尝试了另一个代码。但结果是一样的。我能为这个问题做些什么?

1 个答案:

答案 0 :(得分:1)

根据this 单精度0x492655FE精确表示6.81311875E5或十进制681311.875。如果在小数点后打印更多数字,您将获得相同的输出

然而,float只有23位的尾数,相当于~6-7个精度的十进制数字。其余的通常只是噪音,因为2的幂不能用十进制的小数表示确切的数字,因此可以安全地舍入到前6-7位数