3

是否有一种标准方法可以检查 64 位浮点数是否可以转换为 32 位而不转换为 +/- Infinity?

我知道之后可以检查它的 +/- Inf。

Convert.ToSingle()不会这样做。

4

1 回答 1

2

为了测试一个double值是否会在不产生无穷大的情况下d转换为,您可以测试的绝对值是否严格低于所写的 as (即十六进制)。这个数字是可以转换为浮点数和不能转换为浮点数之间的确切限制。floatddouble3.4028235677973366e+380x1.ffffffp+127

稍微扩展一下,最后一个有限浮点数是:

0x1.fffffep+127   (3.4028234663852886e+38 in decimal)

float如果 typefloat有更多的指数位,下一个数字是:

0x2.000000p+127   (3.4028236692093846e+38 in decimal)

与前者相比更接近后者的数字将向下舍入到前者。极限是两个数字的中点:

0x1.ffffffp+127   (3.4028235677973366e+38 in decimal)
于 2013-05-31T12:51:39.497 回答