强制转换为int VS Math.floor

问题描述 投票:1回答:2

被保存到使用强制转换为int,而不是Math.floor到浮点/双精度值转换为整数?

var scale = 1.5;
int foo1 = (int)scale;
int foo2 = Math.floor(scale);
vala
2个回答
1
投票

在这种情况下,两个案例来诠释和Math.floor将返回整数值。如果x = 3.5则两个功能将在输出返回3。投放到int是对变量转换的任何数据类型的整数类型,在另一方面Math.floor功能将仅地板十进制数为整数未转换的数据类型的函数。但结果将是负值的情况不同,因为强制转换为int接近于零,并Math.floor接近负无穷大。所以在这个角度来看,如果你是在实数(正面和负面的)工作则是不安全的使用强制转换为int,而不是Math.floor得到精确的输出。


0
投票

作为伐拉代码转换成C,这是因为Cast to int vs floor同样的问题

TL; DR:是的,它是安全的,但是当被赋予负数Math.floor和浮点/双精度铸造的结果是不同的。

需要注意的是Math.floor是glib库的一部分,因此是不具备的POSIX轮廓。

© www.soinside.com 2019 - 2024. All rights reserved.