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.这有什么办法吗?
我需要将UInt32类型转换为float而不进行舍入.
那是不可能做到的.
有2 32个可能的uint值.少于2 32个 float值(有2 个32位模式,但包括各种NaN值).除此之外,显然有很多float值无法表示为uint(例如0.5),很明显,你不能完全代表a中的每个uint值float.但是,每个uint(和每个int)都可以完全表示为a double,因此这可能是您问题的解决方案.
您在原始源代码中看到的问题是4278190335不能完全代表a float; 最接近的float值是4278190336.这不是从转换float到uint的问题 - 从您在源代码中指定的确切值转换为a的问题float; 在float以uint转换分别发生(并再次,可以很容易地丢失信息).
| 归档时间: |
|
| 查看次数: |
3235 次 |
| 最近记录: |