Dart基础 02 - num类型和bool类型

189 阅读1分钟

7. 数据类型

和其它语言一样,Dart 也有数据类型。

使用具体类型来定义变量,在使用前必须赋值,这一点和 var 是不同的(和Java相同)。这在前面的变量中也提到了这一点。

7.1 num 类型

7.1.1 num 类型变量

num 不用关心它是否有符号,以及数据的宽度和精度等问题。 num 包含 int 和 double 类型 Dart 中的 int 和 double 可表示的范围并不是固定的,它取决于运行 Dart 的平台, <=64 位。

void main(List<String> args) {
  var x;
  print("x = $x, 类型: ${x.runtimeType}");
​
  num data;
  // print("data = ${data}"); // 具体类型定义变量,使用必须初始化
  data = 100;
  print("data = $data, 类型:${data.runtimeType}");
​
  data = 1.23;
  print("data = $data, 类型:${data.runtimeType}");
}

doublue 和 int 类型赋值时没有隐式转换,但在运算符中有隐式转换。

void main(List<String> args) {
  int x = 1;
  double y = 2.34;
​
  // x = 1.23; // 错误,类型不同
  y = 200;
  // y = x; // 错误,类型不同。
  print("x = $x, 类型: ${x.runtimeType}"); // 1, int
  print("y = $y, 类型: ${y.runtimeType}"); // 200.0 double
​
  var sum = x + y; // 会发生隐式转换 x.toDouble + y
  print("sum = $sum, 类型: ${sum.runtimeType}"); // 201.0, double
}

7.1.2 int 和 double 的转换

Dart 中,提供和 toInt()和 toDouble 两个方法来转换。

​
void main(List<String> args) {
  int x = 100;
  double y = 3.14;
  print(x.toDouble());
  print(y.toInt());
}

7.1.3 num 转换为字符串

在 Dart 中,一般可以使用字符串拼接或者使用toString()方法。

void main(List<String> args) {
  num data = 10086;
​
  var dataString = "$data";
  print(dataString);
​
  dataString = data.toString();
  print(dataString);
}

7.1.4 字符串转换 num 类型

使用用 int.parse() 和 double.parse() 或者 num.parse() 来将字符串解析为数字。 如果字符串无法解析,将引发FormatException异常。 num.parse() 可以用在任何 int.parse()或者 double.parse()的场合。

void main(List<String> args) {
  var value;
​
  value = int.parse("123");
  print("value = $value, 类型: ${value.runtimeType}");
​
  value = int.parse("0xFF");
  print("value = $value, 类型: ${value.runtimeType}");
​
  try {
    value = int.parse("1.23");
    print("value = $value, 类型: ${value.runtimeType}");
  } catch (e) {
    print(e.toString());
  }
​
  // dobule.parse
​
  value = double.parse("3e-2");
  print("value = $value, 类型: ${value.runtimeType}");
​
  value = double.parse("456");
  print("value = $value, 类型: ${value.runtimeType}");
​
  value = double.parse("1.23");
  print("value = $value, 类型: ${value.runtimeType}");
​
  try {
    // value = double.parse("0xFF"); // 崩溃
    value = double.parse("1.23a");  // 崩溃
    print("value = $value, 类型: ${value.runtimeType}");
  } catch (e) {
    print(e.toString());
  }
}

7.1.5 数字的判断

判断数字的类型

  • 奇数 isOdd
  • 偶数 isEven
  • 无穷大 isInfinite, 如 1 除以 0.
  • 非数字 isNaN, 如 0 除以 0。
  • 负数 isNegative
void main(List<String> args) {
  print(100.isOdd);
  print(100.isEven);
  print((-2).isNegative);
  print((0 / 0).isNaN);
  print((2 / 0).isInfinite);
  print(1.isFinite);
}

7.1.6 几个数学函数

使用toStringAsFixed()方法来控制浮点数的小数位数且进行四舍五入, 这个方法返回一个字符串。

void main(List<String> args) {
  String value = (3.1498).toStringAsFixed(2);
  print("value = $value"); // 3.15
​
  print((-1).abs()); // 取绝对值
  print((0.00001).ceil()); // 1 天花板
  print((9.999).floor());  // 9 地板
  print((0.9999).truncate()); // 0 截取,没有四舍五入
  print((0.5).round()); // 1 四舍五入
}

7.2 bool 类型

bool 类型只有两个取值: true 和 false,不存在非零即真

void main(List<String> args) {
  bool b = true;
  // b = 100; // 错误
​
  print("b = $b, 类型: ${b.runtimeType}");
​
  // bool转字符串
  print("$b");
  print(b.toString());
}