一、数字类型
1、基本使用
- Dart 提供了 int 和 double 两种主要的数字类型,以及 num 作为它们的父类型
| 类型 |
说明 |
| int |
表示整数 |
| double |
表示双精度浮点数(小数) |
| num |
可以同时表示整数和浮点数 |
dart
复制代码
int intValue = 42;
double doubleValue = 3.14;
dart
复制代码
num numInt = 100;
num numDouble = 99.99;
- 算术运算
dart
复制代码
int sum = 10 + 5;
int difference = 10 - 3;
int product = 4 * 7;
double quotient = 15 / 3;
int remainder = 17 % 5; // 取余
int quotientInt = 17 ~/ 5; // 整除
print('Sum: $sum');
print('Difference: $difference');
print('Product: $product');
print('Quotient: $quotient');
print('Remainder: $remainder');
print('Integer Quotient: $quotientInt');
复制代码
# 输出结果
Sum: 15
Difference: 7
Product: 28
Quotient: 5.0
Remainder: 2
Integer Quotient: 3
- 自增自减
dart
复制代码
int counter = 5;
counter++;
print('After increment: $counter');
counter--;
print('After decrement: $counter');
复制代码
# 输出结果
After increment: 6
After decrement: 5
2、数学运算库
- Dart 在
dart:math 库中提供了丰富的数学函数
dart
复制代码
import 'dart:math';
void main() {
// 幂运算
print('pow(2, 3): ${pow(2, 3)}');
// 平方根
print('sqrt(16): ${sqrt(16)}');
// 最大最小值
print('max(10, 20): ${max(10, 20)}');
print('min(10, 20): ${min(10, 20)}');
// 随机数
print('Random: ${Random().nextInt(100)}');
}
3、类型转换
(1)字符串转数字
- 基本转换
dart
复制代码
int intValue = int.parse('42');
print('Parsed int: $intValue');
double doubleValue = double.parse('3.14');
print('Parsed double: $doubleValue');
复制代码
# 输出结果
Parsed int: 42
Parsed double: 3.14
- 处理无效输入
dart
复制代码
try {
int invalid = int.parse('abc');
} catch (e) {
print('Parse error: $e');
}
复制代码
# 输出结果
Parse error: FormatException: Invalid radix-10 number (at character 1)
abc
^
- 安全转换
dart
复制代码
int? result1 = int.tryParse('123');
print(result1)
int? result2 = int.tryParse('abc');
print(result2);
复制代码
# 输出结果
Safe parsed int: 123
Safe parsed invalid: null
(2)数字转字符串
dart
复制代码
int num = 42;
double decimal = 3.14159;
// 基本转换
print('Int to String: ${num.toString()}');
print('Double to String: ${decimal.toString()}');
// 保留小数位
print('Fixed 2: ${decimal.toStringAsFixed(2)}');
print('Fixed 4: ${decimal.toStringAsFixed(4)}');
复制代码
# 输出结果
Int to String: 42
Double to String: 3.14159
Fixed 2: 3.14
Fixed 4: 3.1416
(3)int 与 double 互转
dart
复制代码
int intValue = 10;
double doubleValue = 3.14;
double doubleValue2 = 3.6;
// int 转 double
double fromInt = intValue.toDouble();
print('Int to Double: $fromInt');
// double 转 int (截断小数部分)
int fromDouble = doubleValue.toInt();
print('Double to Int: $fromDouble');
// 四舍五入转 int
int rounded = doubleValue2.round();
print('Rounded: $rounded');
// 向上向下取整
print('Floor: ${doubleValue.floor()}');
print('Ceiling: ${doubleValue.ceil()}');
复制代码
# 输出结果
Int to Double: 10.0
Double to Int: 3
Rounded: 4
Floor: 3
Ceiling: 4
4、常用属性
dart
复制代码
// int 的属性
int value = -42;
print('Hash code: ${value.hashCode}');
print('Bit length: ${value.bitLength}');
print('Sign: ${value.sign}');
print('Is even: ${value.isEven}');
print('Is odd: ${value.isOdd}');
// double 的属性
double d = 3.14159;
print('Is finite: ${d.isFinite}');
print('Is infinite: ${d.isInfinite}');
print('Is NaN: ${d.isNaN}');
print('Sign: ${d.sign}');
复制代码
# 输出结果
Hash code: 475673
Bit length: 6
Sign: -1
Is even: true
Is odd: false
Is finite: true
Is infinite: false
Is NaN: false
Sign: 1.0
5、注意事项
- int 和 double 不能直接运算,需要先转换为相同类型。
dart
复制代码
// 错误
int result = 10 + 3.14;
dart
复制代码
// 正确
double result = 10.toDouble() + 3.14;
二、布尔类型
dart
复制代码
bool isActive = true;
bool isFinished = false;
if (isActive) {
print('The system is active');
} else {
print('The system is inactive');
}
三、列表类型
1、基本使用
- 创建列表
dart
复制代码
// 创建整数列表
List<int> numbers = [1, 2, 3, 4, 5];
print('Numbers: $numbers');
// 创建字符串列表
List<String> fruits = ['Apple', 'Banana', 'Orange'];
print('Fruits: $fruits');
// 创建动态类型列表
List<dynamic> mixed = [1, 'two', 3.0, true];
print('Mixed: $mixed');
// 创建空列表
List<int> emptyList = [];
print('Empty List: $emptyList');
复制代码
# 输出结果
Numbers: [1, 2, 3, 4, 5]
Fruits: [Apple, Banana, Orange]
Mixed: [1, two, 3.0, true]
Empty List: []
- 访问列表元素
dart
复制代码
List<int> numbers = [10, 20, 30, 40, 50];
// 通过索引访问
print('First element: ${numbers[0]}');
print('Third element: ${numbers[2]}');
// 使用 first 和 last
print('First: ${numbers.first}');
print('Last: ${numbers.last}');
复制代码
# 输出结果
First element: 10
Third element: 30
First: 10
Last: 50
- 修改列表元素
dart
复制代码
List<int> numbers = [1, 2, 3, 4, 5];
print('Original: $numbers');
// 修改单个元素
numbers[0] = 10;
print('After modifying first: $numbers');
// 修改最后一个元素
numbers[numbers.length - 1] = 50;
print('After modifying last: $numbers');
复制代码
# 输出结果
Original: [1, 2, 3, 4, 5]
After modifying first: [10, 2, 3, 4, 5]
After modifying last: [10, 2, 3, 4, 50]
- 添加元素
dart
复制代码
List<int> numbers = [1, 2, 3];
// 添加单个元素
numbers.add(4);
print('After add(4): $numbers');
// 添加多个元素
numbers.addAll([5, 6, 7]);
print('After addAll: $numbers');
// 在指定位置插入
numbers.insert(0, 0);
print('After insert at 0: $numbers');
// 插入多个元素
numbers.insertAll(2, [10, 20]);
print('After insertAll at 2: $numbers');
复制代码
# 输出结果
After add(4): [1, 2, 3, 4]
After addAll: [1, 2, 3, 4, 5, 6, 7]
After insert at 0: [0, 1, 2, 3, 4, 5, 6, 7]
After insertAll at 2: [0, 1, 10, 20, 2, 3, 4, 5, 6, 7]
- 删除元素
dart
复制代码
List<int> numbers = [1, 2, 3, 4, 5, 3, 6, 3];
// 删除第一个匹配的元素
numbers.remove(3);
print('After remove(3): $numbers');
// 删除指定索引的元素
numbers.removeAt(0);
print('After removeAt(0): $numbers');
// 删除最后一个元素
numbers.removeLast();
print('After removeLast: $numbers');
// 删除满足条件的元素
numbers.removeWhere((n) => n > 4);
print('After removeWhere(> 4): $numbers');
// 清空列表
numbers.clear();
print('After clear: $numbers');
复制代码
# 输出结果
After remove(3): [1, 2, 4, 5, 3, 6, 3]
After removeAt(0): [2, 4, 5, 3, 6, 3]
After removeLast: [2, 4, 5, 3, 6]
After removeWhere(> 4): [2, 4, 3]
After clear: []
- 查找元素
dart
复制代码
List<int> numbers = [1, 2, 3, 4, 5, 6];
List<int> withDuplicates = [1, 2, 3, 2, 3, 2];
// 检查是否包含元素
bool hasThree = numbers.contains(3);
print('Contains 3: $hasThree');
// 查找元素的索引
int index = numbers.indexOf(3);
print('Index of 3: $index');
// 查找最后一次出现的索引
int lastIndex = withDuplicates.lastIndexOf(2);
print('Last index of 2: $lastIndex');
// 查找满足条件的第一个元素
int? found = numbers.firstWhere((n) => n > 3);
print('First > 3: $found');
复制代码
# 输出结果
Contains 3: true
Index of 3: 2
Last index of 2: 5
First > 3: 4
2、创建特殊列表
- 固定长度列表
dart
复制代码
// 创建固定长度列表,填充默认值
List<int> fixedLength = List.filled(5, 0);
print('Fixed length: $fixedLength');
fixedLength[0] = 10;
print('After modify: $fixedLength');
// 不能添加或删除元素
// fixedLength.add(1);
// fixedLength.removeAt(0);
复制代码
# 輸出结果
Fixed length: [0, 0, 0, 0, 0]
After modify: [10, 0, 0, 0, 0]
- 生成列表
dart
复制代码
// 使用 generate 生成列表
List<int> generated = List.generate(5, (index) => index * 2);
print('Generated: $generated');
// 生成 0 ~ 9
List<int> range = List.generate(10, (i) => i);
print('Range 0-9: $range');
复制代码
# 输出结果
Generated: [0, 2, 4, 6, 8]
Range 0-9: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 从其他集合创建
dart
复制代码
// 从 Iterable 创建
List<int> fromIterable = List.from([1, 2, 3, 4, 5]);
print('From Iterable: $fromIterable');
// 从 Set 创建
Set<int> set = {1, 2, 3, 2, 1};
List<int> fromSet = set.toList();
print('From Set: $fromSet');
// 使用 of
List<String> ofList = List.of(['a', 'b', 'c']);
print('From of: $ofList');
// 不可变列表
List<int> immutable = List.unmodifiable([1, 2, 3]);
print('Unmodifiable: $immutable');
// immutable[0] = 10;
复制代码
# 输出结果
From Iterable: [1, 2, 3, 4, 5]
From Set: [1, 2, 3]
From of: [a, b, c]
Unmodifiable: [1, 2, 3]
3、注意事项
- 列表索引越界
dart
复制代码
List<int> numbers = [1, 2, 3];
// 索引越界
// print(numbers[10]);
// 先检查长度
if (numbers.length > 10) {
print(numbers[10]);
}
// 安全访问
int? safe = numbers.length > 10 ? numbers[10] : null;
print('Safe access: $safe');
- 空列表操作
dart
复制代码
List<int> empty = [];
// 空列表 remove 会返回 false
bool removed = empty.remove(1);
print('Remove from empty: $removed');
// 空列表 first / last 会报错
// print(empty.first);
// print(empty.last);
// // 先检查
if (empty.isNotEmpty) {
print('First: ${empty.first}');
} else {
print('List is empty');
}