【问题标题】:C: difference between (int)x and floor(x)?C: (int)x 和 floor(x) 的区别?
【发布时间】:2010-04-09 08:56:55
【问题描述】:

在C语言中,这两者有什么区别?

float myF = 5.6;

printf( "%i \n", (int)myF ); // gives me "5"
printf( "%ld \n", floor(myF) ); // also "5"?

什么时候比另一个更可取?

【问题讨论】:

标签: c floating-point


【解决方案1】:

一个很大的区别是负数;如果将myF 更改为-5.6,则转换为int 返回-5,而floor(myF)-6

至于哪个更可取,根据经验,如果您知道这就是您所需要的,我会说只转换为 int —— 既然您在这里问,机会是你可能想要floor

(另请注意,使用printf 格式,%ld 是一个长整数;双精度数是%lf。)

【讨论】:

    【解决方案2】:

    floor(n) 返回n 的数学下限,即不大于n 的最大整数。 (int)n 返回n 的截断,它是绝对值 不大于n 的整数。同样,ceil(n) 返回n 的数学上限,或不小于n 的最小整数。正如AraK所指出的,floor()ceil()返回的数字可能不在int的范围内。

    【讨论】:

      【解决方案3】:

      当您获得双精度的 floor 时,“整数”double 可能会或可能不会在 int 类型的变量中表示。

      【讨论】:

        【解决方案4】:

        前者将您的浮点值转换为整数(并且您在 printf 调用中使用了 int 说明符)。

        后者使用 floor(来自 C 数学库)返回已向下舍入的双精度数。

        【讨论】:

        • 嗯,是的,您在技术上是正确的。 “Math.floor”不在 C 语言中。我想你知道我的意思。检查我的编辑。
        • 是的,我做到了。对不起,如果我是个混蛋。这个地方往往会让人们有点自以为是......
        【解决方案5】:

        您希望结果是整数还是双精度数?

        如果你想要一个整数,强制转换;如果你想要双倍,请使用floor

        例如,如果你想得到值的余弦值,你应该只使用floor,因为cos 需要一个双精度值。

        但是,如果您想使用 exit 的值(只是在此处选择一个随机 API),您应该强制转换,因为 exit 需要一个 int。

        【讨论】:

          猜你喜欢
          • 2021-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-08
          • 2012-02-15
          相关资源
          最近更新 更多