Cast to int vs Math.floor


使用

cast到int而不是Math.floor将浮点/双精度值转换为整数是否可以保存?

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

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

当 Vala 代码被翻译成 C 时,这与 Cast to int vs floor 的问题相同

TL;DR:是的,这是安全的,但是当给出负数时,Math.floor和浮点/双转换的结果是不同的。

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

最新更新