【问题标题】:Cast to int vs Math.floor转换为 int vs Math.floor
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      由于 Vala 代码被翻译成 C,这和Cast to int vs floor 是同一个问题

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

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

      【讨论】:

        猜你喜欢
        • 2019-10-27
        • 2014-10-15
        • 2016-12-06
        • 2012-06-23
        • 1970-01-01
        • 2019-06-18
        • 2023-03-09
        • 2020-07-03
        • 2014-06-04
        相关资源
        最近更新 更多