c# - 如何在不转换为无穷大的情况下检查 double 是否适合 float

标签 c# casting floating-point

是否有一种标准方法来检查 64 位 float 是否可以转换为 32 位 float 而不转换为 +/- 无穷大?

我知道之后可以检查它是否有 +/- Inf。

Convert.ToSingle() 不会这样做。

最佳答案

为了测试 doubled 是否会转换为 float 而不会产生无穷大,您可以测试 d的绝对值严格低于写成3.4028235677973366e+38double(即十六进制的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/

相关文章:

c# - 使用 C# 在 GeckoFx 中使用 MutationObserver?

c# - 在运行时更改数据透视表头

c# - 为一个 fragment 添加多个父 Activity

c# - 如何转换 GroupedEnumerable?

c++ - 小数四舍五入为零

c++ - 如何在 C++ 中将尾数和指数转换为 Double

javascript - Javascript 中的单精度 float 仿真 (float32)

c# - 使用提取和覆盖模式的 TDD 构造函数中的虚拟方法

java - 我有什么方法可以覆盖 Java 中的系统属性吗?

c# - 添加两个 double 给出错误的结果