将UInt32转换为float而不进行舍入?

iMo*_*oto 0 floating-point rounding c#-4.0 floating-point-precision

我需要将UInt32类型转换为float而不进行舍入.说我同意

float num = 4278190335;
uint num1 = num;
Run Code Online (Sandbox Code Playgroud)

该值立即变为4278190336.这有什么办法吗?

Jon*_*eet 9

我需要将UInt32类型转换为float而不进行舍入.

那是不可能做到的.

有2 32个可能的uint值.少于2 32个 float值(有2 个32位模式,但包括各种NaN值).除此之外,显然有很多float值无法表示为uint(例如0.5),很明显,你不能完全代表a中的每个uintfloat.但是,每个uint(和每个int)可以完全表示为a double,因此这可能是您问题的解决方案.

您在原始源代码中看到的问题是4278190335不能完全代表a float; 最接近的float值是4278190336.这不是从转换floatuint的问题 - 从您在源代码中指定的确切值转换为a的问题float; 在floatuint转换分别发生(并再次,可以很容易地丢失信息).