【问题标题】:Does casting double to int returns the round down number?将 double 转换为 int 是否会返回向下舍入的数字?
【发布时间】:2016-05-23 20:27:57
【问题描述】:

我有以下例子:

double x = 2.5;
int n = (int)x;
int k = (int) floor(x);

将 double 转换为 int 会返回向下舍入的数字吗?或者我应该使用地板功能?

【问题讨论】:

标签: c casting double math.h


【解决方案1】:

小心使用负数。强制转换将向 0 截断。floor 将向负无穷截断。

如果值为正,则两种方法都返回相同的截断值。

【讨论】:

  • 对。我完全忘记了负舍入规则以及向上或向下舍入意味着什么。
【解决方案2】:

(int) 会截断初始的double 值(已删除小数部分)

  2.1  -> 2
  2.5  -> 2
  2.99 -> 2

看起来像floor,但在负数的情况下它们不一样:

  (int)-2.1   -> -2
  floor(-2.1) -> -3.0

因为floor 返回小于或等于给定参数的最大整数值

【讨论】:

    【解决方案3】:

    注意 int 和 double 的限制。

    int main(void)
    {
        double val1 = INT_MAX + 10.5;
        int    val2 = val1;
    
        printf("val1 = %f\nval2 = %d\n", val1, val2);
    
        return (0);
    }
    

    这会产生以下输出:

    val1 = 2147483657.500000
    val2 = -2147483648
    

    (不知道 INT_MAX 是否标准,抱歉)。

    【讨论】:

    • 将超出范围的 double 类型转换为 int 是未定义的行为
    • 我不知道,这是投射时要小心的另一个原因。
    • INT_MAX 是标准的。请在答案中添加有关未定义行为的信息,并回答实际问题。
    猜你喜欢
    • 2012-05-04
    • 2015-01-22
    • 2012-10-28
    • 2014-06-15
    • 1970-01-01
    • 2017-07-07
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多