转换为 int 与 Math.floor

Cast to int vs Math.floor

使用 cast to int 而不是 Math.floor 将 float / double 值转换为整数是否省事?

var scale = 1.5;
int foo1 = (int)scale;
int foo2 = Math.floor(scale);

由于 Vala 代码被翻译成 C,这与 Cast to int vs floor

是同一个问题

TL;DR:是的,它是安全的,但是当给定负数时,Math.floor 和 float/double 转换的结果是不同的。

请注意 Math.floor 是 GLib 库的一部分,因此在 POSIX 配置文件中不可用。

在这种情况下,Case to Int 和 Math.floor 都会 return 整数值。如果 x=3.5 那么两个函数都将 return 3 输出。 Cast to int 是将任何数据类型的变量转换为整数类型的函数,另一方面 Math.floor 函数只会将十进制数到整数不转换数据类型。但是在负值的情况下结果会有所不同,因为 Cast to Int 接近零而 Math.floor 接近负无穷大。因此,从这个角度来看,如果您正在处理实数(正数和负数),那么使用 Cast to Int 而不是 Math.floor 来获得精确输出是 不安全的