【发布时间】:2019-07-04 20:34:36
【问题描述】:
使用 cast to int 而不是 Math.floor 将 float / double 值转换为整数是否节省?
var scale = 1.5;
int foo1 = (int)scale;
int foo2 = Math.floor(scale);
【问题讨论】:
标签: vala
使用 cast to int 而不是 Math.floor 将 float / double 值转换为整数是否节省?
var scale = 1.5;
int foo1 = (int)scale;
int foo2 = Math.floor(scale);
【问题讨论】:
标签: vala
在这种情况下,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 配置文件中不可用。
【讨论】: