C:更好的方法将 double 向下舍入为 int

C: Better method for rounding down double to int

我的问题是;通过 roundedInt = (int)unRoundedDoubleroundedInt = (int)(floor(unRoundedDouble)) 将 double 向下舍入为 int 之间是否存在功能差异?

我看到后者在代码中使用,并认为可能是出于安全或功能原因,但无法弄清楚会有什么不同的处理方式。

此外:舍入的 Double 不会太大而无法放入 int,这是事先确定的。

floor 的解决方案适用于负数,转换版本在数学上不正确——如果向下舍入是指 floor 运算。

所以 #floor 总是作为数学运算 floor 工作,转换对正数的行为相同。然而,对底片的投射行为类似于 ceiling 操作。

它们根本不同。转换为 int 会将非整数部分截断为 0floor 会做同样的事情,但是朝向 -infinity。

示例:

double d = -1.234;
printf("%d %d\n", (int)d, (int)floor(d));

产量:

-1 -2