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());
}