long赋值给float会有问题吗?
比如:
long l1 = 4294967297; //二进制为1 00000000 00000000 00000000 00000001 float f1 = l1; var str1 = ToBinString(BitConverter.GetBytes(f1)); long l2 = (long)f1; Console.WriteLine($"str1:{str1}, l2:{l2}"); //str1:01001111 10000000 00000000 00000000, l2:4294967296
转为float的二进制过程中的相关步骤:
4) 转为科学计数法:
1.0000000 00000000 00000000 00000000 1*(232),最后的9个bit 00000000 1超出了23bit会做舍入处理后截掉
5) 最终二进制:
0(1001 1111)(0000000 00000000 00000000)
6) 再转为十进制:
1.0000000 00000000 00000000*(232) >>> 小数点右移32位 >>> 1 00000000 00000000 00000000 00000000 = 4294967296
跟原来的值差了1

浙公网安备 33010602011771号