我正在参加跨端技术专题征文活动,详情查看:juejin.cn/post/710123… 。
今天继续学习 Flutter 的编程语言 Dart 的语法基础,主要是关于数据类型中数字类型的内容。
关键字
dart 中有 3 个关键字可以用来声明数字:
- num
首先是 num,它既可以表示整数也可以表示小数:
// 例 1.1
void main() {
// 整数
num number1 = 1;
print(number1); // 1
// 小数
num number2 = 1.1;
print(number2); // 1.1
}
- int
int 只能用来表示整数,如果赋值了小数会报错“A value of type 'double' can't be assigned to a variable of type 'int'.”:
// 例 1.2
void main() {
// 整数
int number1 = 1;
print(number1); // 1
// 小数
int number2 = 1.1; // 报错
print(number2);
}
- double
double 用于表示浮点数,既可以是小数,也可以是整数:
// 例 1.3
void main() {
// 整数
double number1 = 1;
print(number1); // 1.0
// 小数
double number2 = 1.1;
print(number2); // 1.1
}
num 和 double 都可以用来声明整数和小数,那么有什么区别呢?可以看到例 1.1 中,num 声明变量时赋值了整数 1,打印结果也是 1;但是例 1.3 中 double 声明的变量赋值为 1,打印结果却是 1.0,还是浮点数的表示方式。
API
num / int / double 除了是表示数字类型的关键字,还有各自对应着的类。其中 int 和 double 是 num 数字类型的子类,有着相关的类的方法。
有些其实和 js 中 Number 对象或 Math 对象的方法差不多,比如转成字符串类型的 toString() 方法,还有保留小数位数的 toStringAsFixed() 方法,对应 js 里的就是 toFixed(),再比如用来四舍五入的方法 round(),对应但就是 js 中的 Math.round()。下面介绍几个 dart 有而 js 没有的 api,更多其它的方法可以查阅官方文档。
- compareTo()
用于比较大小:
// 例 2.1
void main() {
print(1.compareTo(1)); // 0
print(1.compareTo(2)); // -1
print(2.compareTo(1)); // 1
}
可以看出,如果调用 compareTo() 的数字同传入的参数一样大则返回 0,小则返回 -1,大则为 1。
- gcd()
用于返回最大公约数:
// 例 2.2
void main() {
print(10.gcd(4)); // 2
}
- remainder()
取余数,在 js 中使用 %,比如 12 % 8(dart 中也可以直接用 % 取余数),在 dart 中有个 remainder() 方法:
// 例 2.3
void main() {
print(12.remainder(8)); // 4
}
- toInt()
用于做类型转换,将类型转为整数型:
// 例 2.4
void main() {
double number = 1.9;
print(number.toInt()); // 1
}
由例 2.4 可以得出结论:转换时 toInt() 是向下取整的。
