【问题标题】:In Dart is there a quick way to convert int to double?在 Dart 中是否有一种将 int 转换为 double 的快速方法?
【发布时间】:2014-10-17 04:17:48
【问题描述】:

非常简单的问题。我有无用的课:

class Useless{
  double field;
  Useless(this.field);
}

然后我犯下大罪并致电new Useless(0); 在检查模式下(这是我运行测试的方式)会爆炸,因为 'int' 不是 'double' 类型的子类型

现在,如果我使用 new Useless(0.0) 就可以了,但老实说,我花了很多时间来纠正我的测试,到处都是 .0,我觉得这样做很愚蠢。

作为临时措施,我将构造函数重写为:

    class Useless{
      double field;
      Useless(num input){
          field = input.toDouble();
      }
    }

但这很丑陋,如果经常调用我恐怕会很慢。有没有更好的方法来做到这一点?

【问题讨论】:

  • 为什么需要双份?你不能到处使用num吗?
  • 遵循 Dart 风格指南:“在性能敏感的代码中,更喜欢使用 double 或 int 而不是 num 进行参数类型注释”
  • 这对我来说看起来不像性能敏感代码。我认为您应该决定是否需要一个通用数字,或者您是否真的需要 int 或 double,然后您应该将所有代码更改为 num、int 或 double。
  • @Robert 使用intdouble 而不是num 更适合传达意图。为什么停止使用num?我们可以将所有变量设置为dynamic 并一键消除所有强类型的烦恼...

标签: dart


【解决方案1】:

只需toDouble()

例子:

int intVar = 5;
double doubleVar = intVar.toDouble();

感谢@jamesdlin,他在对我之前的回答的评论中给出了这个答案......

【讨论】:

    【解决方案2】:

    In Dart 2.1,整数字面量可以直接用于需要double 的地方。 (见https://github.com/dart-lang/sdk/issues/34355.

    请注意,这是语法糖,仅适用于文字int 变量仍然不会被自动提升为double,所以代码如下:

    double reciprocal(double d) => 1 / d;
    
    int x = 42;
    reciprocal(x);
    

    会失败,你需要这样做:

    reciprocal(x.toDouble());
    

    【讨论】:

      【解决方案3】:

      你也可以使用:

      int x = 15;
      double y = x + .0;
      

      【讨论】:

      • 当我想从值可能已经是地图的 Map 投射时,我发现这个答案最有用:(map['length'] == null) ? null : map['length'] + .0
      • 我在解析 HTTP json 响应时必须这样做。有没有更好的办法?
      • 当你想要一个 const 值而 .toDouble() 不是时,这也是有效的
      【解决方案4】:

      使用 toDouble() 方法。
      例如:

      int a = 10
      print(a.toDouble) 
      //or store value in a variable and then use
      double convertedValue = a.toDouble()
      

      【讨论】:

        【解决方案5】:

        Dart 语言有两种数字类型:int 和 double。前者是任意精度的有符号整数,后者是 IEEE-754 双精度浮点数。

        没有隐式转换,因此您必须显式使用toDouble,或者更好:键入 y 作为 num,它是 double 和 int 的超类。

        int x = 11;
        
        double y = x.toDouble();
        

        如果该数字不能表示为双精度数,则返回一个近似值。对于数值较大的整数,近似值可能是无限的。

        【讨论】:

          【解决方案6】:

          从这次尝试中:

          class Useless{
            double field;
            Useless(num input){
              field = input.toDouble();
            }
          }
          

          您可以使用double classparse method,它接受一个字符串。

          class Useless{
            double field;
            Useless(num input){
              field = double.parse(input.toString()); //modified line
            }
          }
          

          使用构造函数的初始化器编写上述类的更简洁的方法是:

          class Useless{
            double _field;
            Useless(double field):_field=double.parse(field.toString());
          }
          

          【讨论】:

            【解决方案7】:

            没有比您包含的选项更好的方法了:(

            我也被很多东西咬了,出于某种原因,我在编辑器中没有收到任何警告,它只是在运行时失败;好烦人:(

            【讨论】:

              【解决方案8】:

              由于颤振中的所有除法都会导致双精度,因此我做的最简单的方法就是将整数值除以 1: IE。 int x = 15; double y = x /1;

              【讨论】:

                【解决方案9】:

                我正在使用组合:

                static double checkDouble(dynamic value) {
                  if (value is String) {
                    return double.parse(value);
                  } else if (value is int) {
                    return 0.0 + value;
                  } else {
                    return value;
                  }
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-01-14
                  • 1970-01-01
                  • 2010-11-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-07-02
                  • 1970-01-01
                  相关资源
                  最近更新 更多