1

我有一个十六进制值 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

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

4

1 回答 1

1

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

然而,浮点数只有 23 位尾数,对应于约 6-7 个十进制数字的精度。其余的通常只是噪音,因为 2 的幂不能准确表示十进制小数中的数字,因此只四舍五入到前 6-7 位数字是安全的

于 2013-11-07T01:27:11.697 回答