转换为int vs Math.floor

时间:2019-02-11 10:58:08

标签: vala

使用强制转换为int而不是Math.floor来将float / double值转换为整数是否保存?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

随着Vala代码被翻译成C语言,这个问题与Cast to int vs floor

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

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