是否有一种标准方法来检查 64 位 float 是否可以转换为 32 位 float 而不转换为 +/- 无穷大?
我知道之后可以检查它是否有 +/- Inf。
Convert.ToSingle()
不会这样做。
最佳答案
为了测试 double
值 d
是否会转换为 float
而不会产生无穷大,您可以测试 d
的绝对值严格低于写成3.4028235677973366e+38
的double
(即十六进制的0x1.ffffffp+127
).这个数字是可以转换为 float 的 double 和不能转换为 float 的 double 之间的确切限制。
展开一点,最后一个有限 float 是:
0x1.fffffep+127 (3.4028234663852886e+38 in decimal)
如果 float
类型有更多的指数位,下一个 float
数是:
0x2.000000p+127 (3.4028236692093846e+38 in decimal)
比后者更接近前者的数字向下舍入为前者。极限是两个数的中点:
0x1.ffffffp+127 (3.4028235677973366e+38 in decimal)
关于c# - 如何在不转换为无穷大的情况下检查 double 是否适合 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16857604/