【问题标题】:How to convert a double to an int in Dart?如何在 Dart 中将 double 转换为 int?
【发布时间】:2014-01-14 07:34:00
【问题描述】:

以下产生以下错误:

int calc_ranks(ranks)
{
  double multiplier = .5;
  return multiplier * ranks;
}

返回类型double 不是int,由方法calc_ranks 定义。如何舍入/转换为int?

【问题讨论】:

    标签: dart


    【解决方案1】:

    我看到很多答案,但描述较少。希望我的回答能增加一些价值。 让我们初始化变量,看看它会如何随着不同的方法改变。

     double x = 8.5;
    

    toInt()

    它会截断十进制值。

     int a = x.toInt();
     print(a); // 8
    

    截断()

    它还会截断十进制值。

     int b = x.truncate();
     print(b); // 8
    

    round()

    它返回最接近的整数。它使用半向上舍入模式。

      int c = x.round();
      print(c); // 9
    

    ceil()

    它返回大于该值的最接近的整数。

      int c = x.ceil();
      print(c); // 9
    

    地板()

    它返回小于该值的最接近的整数。

      int c = x.floor();
      print(c); // 8
    

    【讨论】:

      【解决方案2】:

      您可以简单地使用toInt() 将num 转换为int。

      int calc_ranks(ranks)
      {
        double multiplier = .5;
        return (multiplier * ranks).toInt();
      }
      

      请注意,要执行完全相同的操作,您可以使用 Truncating division operator:

      int calc_ranks(ranks) => ranks ~/ 2;
      

      【讨论】:

        【解决方案3】:

        试试这个!

        int calc_ranks(ranks)
        {
          double multiplier = .5;
          return (multiplier * ranks).truncate();
        }
        

        【讨论】:

          【解决方案4】:

          还有另一种选择,您可以先将 double 转换为 'num' 数据类型,然后使用 toInt() 转换为 int。

            double multiplier = .5;
            return ((multiplier * ranks) as num).toInt();
          

          num 类型是 int 和 double 类型的继承数据类型。 您可以将 int 和 double 都转换为 num,然后再将其转换为您想要的任何值

          (double -> 使用 toDouble(), int -> 使用 toInt())

          【讨论】:

            【解决方案5】:

            很简单,

            (20.8).round()
            

            对于字符串,

            double.tryParse(20.8).round()
            

            【讨论】:

              【解决方案6】:

              从字符串到整数 ->

              1. 如果你使用 int 格式的字符串,比如 '10' 然后使用---->

                int.parse(值)

                但是如果字符串是双格式的,比如 '10.6' 然后像这样使用---->

                double.parse(value).toInt()

              2. 将双精度转换为整数

                doubleValue.toInt()

              【讨论】:

                【解决方案7】:

                Dart round double 到 int

                使用round()方法,我们可以得到一个最接近双精度的整数。

                例如:

                int num1 = (2.3).round();
                // 2
                
                int num2 = (2.5).round();
                // 3
                
                int num3 = (-2.3).round();
                // -2
                
                int num4 = (-2.5).round();
                // -3
                

                您也可以尝试在 Flutter 中将那些方法将 double 转换为 int

                  double x = 2.5;
                 
                  int a = x.toInt();
                  int b = x.truncate();
                  int c = x.round();
                  int d = x.ceil();
                  int e = x.floor();
                 
                  print(a); // 2
                  print(b); // 2
                  print(c); // 3
                  print(d); // 3
                  print(e); // 2
                

                【讨论】:

                • 首先,这个问题不是关于 round 在 Dart 中的含义。其次,其余的东西只是从existing answer复制过来的。请不要像这样发送垃圾邮件。您只是在复制其他答案。
                • @iDecode 问:“如何在 Dart 中将 double 转换为 int?”这个答案:“使用 round() 我们可以获得最接近双精度的整数”。为什么你认为答案与问题无关?
                • @Ruben 此答案已由其他用户提供。一遍又一遍地发布同样的东西没有任何好处。
                • 我已经告诉过你,从现在开始我会注意的,即使那样你为什么要通过投票来发表评论。虽然这里的方法是一样的,但是尝试不同的解释,这样我就给出了一个如何取数的例子
                • 在本文中,我试图解释整数如何最接近双精度数。通过这个 int num1 = (2.3).round(); // 2 int num2 = (2.5).round(); // 3 int num3 = (-2.3).round(); // -2 int num4 = (-2.5).round(); // -3
                【解决方案8】:

                您可以使用以下任何一种。

                double d = 20.5;
                
                int i = d.toInt(); // i = 20
                int i = d.round(); // i = 21
                int i = d.ceil();  // i = 21
                int i = d.floor(); // i = 20
                

                【讨论】:

                • 那么,toInt 和 floor 或 round 和 ceil 有什么区别
                • Floor 和 ceil 会将 double 转换为最接近的 int,分别向下和向上,因此 (20.1).floor() 将是 20,(20.1).ceil() 将是 21。toInt 削减去掉尾数,只留下特征,round 使得尾数低于 0.5 的数字下降,其他数字上升。
                【解决方案9】:

                使用round() 方法对其进行舍入:

                int calc_ranks(ranks) {
                    double multiplier = .5;
                    return (multiplier * ranks).round();
                }
                

                【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-11-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-08-16
                • 2020-09-11
                • 2011-05-10
                相关资源
                最近更新 更多