将带有负数的 Float 转换为 Int32 失败,C

标签 c floating-point

我有以下函数,假设将 float 转换为 int32。问题是对于负数它根本不起作用(我的 if 语句没有执行)。我已经尝试了一个类似的程序,用于从 float 到 int16 的转换,一切正常。对不起,如果这太简单了,但我无法弄清楚我遗漏了什么以及为什么它不适用于负值。

#define MaxInt32 2147483647
#define MinInt32 -2147483648
…
bool CastFloatToInt32 ( float  fNumber, int32 *ConvertedValue) {
    bool CastStatus = False;

    if ( ( fNumber >= MinInt32 ) && ( fNumber <= MaxInt32 ) ) {
        *ConvertedValue = ( int32 ) ( fNumber );
        CastStatus = True;

    } else {
        if (fNumber < MinInt32) {
            *ConvertedValue = MinInt32;

        } else {
            *ConvertedValue = MaxInt32;
        }
    }

    return CastStatus;
}

最佳答案

你可以在这里看到原因:https://stackoverflow.com/a/20910712/1073171

因此,您可以通过将定义更改为以下任一方式来修复此代码:

#define MaxInt32 (int32)0x7FFFFFFF
#define MinInt32 (int32)0x80000000

否则:

#define MaxInt32 (int32)2147483647
#define MinInt32 (int32)(-2147483647 - 1)

推理在我上面链接的答案中给出。如果您使用的是 GCC,您也可以随时移动到 -std=gnu99 或类似的!

关于将带有负数的 Float 转换为 Int32 失败,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590771/

相关文章:

c - 简单的 32 位到 64 位转换?

C : mark the every struct, union ,数组元素

c - 将 char * 数组转换为 int 和 float 的最有效方法是什么?

C++:计算给定范围内可能的浮点值的数量

c++ - 零减零等于无穷大?

c - 如何阅读直到换行

c - 为什么这段代码的运行时效率是O(n^2)?

javascript - 对象中 float 的总和。 ( typescript )

mysql - FLOAT 有几位数字?

c# - 浮点精度