C:更好的方法将 double 向下舍入为 int
C: Better method for rounding down double to int
我的问题是;通过 roundedInt = (int)unRoundedDouble
和 roundedInt = (int)(floor(unRoundedDouble))
将 double 向下舍入为 int 之间是否存在功能差异?
我看到后者在代码中使用,并认为可能是出于安全或功能原因,但无法弄清楚会有什么不同的处理方式。
此外:舍入的 Double 不会太大而无法放入 int,这是事先确定的。
floor
的解决方案适用于负数,转换版本在数学上不正确——如果向下舍入是指 floor
运算。
所以 #floor
总是作为数学运算 floor
工作,转换对正数的行为相同。然而,对底片的投射行为类似于 ceiling
操作。
它们根本不同。转换为 int
会将非整数部分截断为 0
。 floor
会做同样的事情,但是朝向 -infinity。
示例:
double d = -1.234;
printf("%d %d\n", (int)d, (int)floor(d));
产量:
-1 -2
我的问题是;通过 roundedInt = (int)unRoundedDouble
和 roundedInt = (int)(floor(unRoundedDouble))
将 double 向下舍入为 int 之间是否存在功能差异?
我看到后者在代码中使用,并认为可能是出于安全或功能原因,但无法弄清楚会有什么不同的处理方式。
此外:舍入的 Double 不会太大而无法放入 int,这是事先确定的。
floor
的解决方案适用于负数,转换版本在数学上不正确——如果向下舍入是指 floor
运算。
所以 #floor
总是作为数学运算 floor
工作,转换对正数的行为相同。然而,对底片的投射行为类似于 ceiling
操作。
它们根本不同。转换为 int
会将非整数部分截断为 0
。 floor
会做同样的事情,但是朝向 -infinity。
示例:
double d = -1.234;
printf("%d %d\n", (int)d, (int)floor(d));
产量:
-1 -2