我有一个想要转换为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
我尝试了另一个代码。但结果是一样的。我能为这个问题做些什么?
答案 0 :(得分:1)
根据this 单精度0x492655FE精确表示6.81311875E5或十进制681311.875。如果在小数点后打印更多数字,您将获得相同的输出
然而,float只有23位的尾数,相当于~6-7个精度的十进制数字。其余的通常只是噪音,因为2的幂不能用十进制的小数表示确切的数字,因此可以安全地舍入到前6-7位数