代码之家  ›  专栏  ›  技术社区  ›  Mark

从double转换为int时如何避免使用as?

  •  2
  • Mark  · 技术社区  · 6 年前

    我试图计算一个百分比值,如下所示 count size 是整数:

    var percent = count * 100 / size as int;
    

    3 回复  |  直到 6 年前
        1
  •  4
  •   Alexandre Ardhuin    6 年前

    可以使用截断除法运算符 ~/ 做你想做的事。

    var percent = count * 100 ~/ size;
    
        2
  •  1
  •   Mark    6 年前

    哎呀,原来我不能用'as int',因为int不是double的子类。相反,我需要使用round()方法,该方法返回如下整数:

        var percent = (count * 100 / size).round();
    
        3
  •  1
  •   Stefan    6 年前

    据我所知,飞镖是不灵活的铸造,因此它是不建议(甚至不允许在这种情况下)。

    可以改用round()函数:

    int count = 1;
    int size = 3;
    var percent = (count * 100 / size);
    print(percent);
    
    int asInt = percent.round();
    print(asInt);
    

    或者如果你想 interger rounding ,使用 floor()

    int count = 1;
    int size = 3;
    var percent = (count * 100 / size);
    print(percent);
    
    int asInt = percent.floor();
    print(asInt);
    

    在这些示例中,百分比是一个双精度值,可以存储起来供以后使用。


    ceil :
    int count = 2;
    int size = 3;
    
    var percent = (count * 100 / size);
    print(percent);
    
    int asIntRound = percent.round();
    print(asIntRound);
    
    int asIntFloor = percent.floor();
    print(asIntFloor);
    
    int asIntCeil = percent.ceil();
    print(asIntCeil);
    

    输出:

    66.66666666666667
    67
    66
    67