Dart Double
最后修改日期:2025 年 6 月 4 日
在 Dart 中,double 是一种内置类型,表示 64 位浮点数。它符合 IEEE 754 浮点运算标准。
Double 值可以表示整数和小数。它们适用于需要精度的科学计算和测量。
基本 Double 声明
创建 double 的最简单方法是使用字面量表示法。
main.dart
void main() {
double temperature = 23.5;
double price = 9.99;
double scientific = 1.23e5; // 1.23 × 10^5
print(temperature);
print(price);
print(scientific);
}
我们声明了三个具有不同值的 double 变量。科学计数法可用于表示非常大或非常小的数字。
$ dart main.dart 23.5 9.99 123000.0
Double 运算
Doubles 支持加法和除法等标准算术运算。
main.dart
void main() {
double x = 10.5;
double y = 3.2;
print('Addition: ${x + y}');
print('Subtraction: ${x - y}');
print('Multiplication: ${x * y}');
print('Division: ${x / y}');
print('Remainder: ${x % y}');
print('Power: ${x * x}');
}
这演示了 double 值的基本算术运算。请注意,即使结果是整数,除法也始终返回一个 double。
$ dart main.dart Addition: 13.7 Subtraction: 7.3 Multiplication: 33.6 Division: 3.28125 Remainder: 0.9000000000000004 Power: 110.25
Double 解析
我们可以使用 parse 和 tryParse 方法将字符串转换为 double。
main.dart
void main() {
String numStr = '3.14159';
String invalidStr = '3.14.15';
double pi = double.parse(numStr);
double? parsed = double.tryParse(invalidStr);
print('Parsed pi: $pi');
print('Try parse invalid: $parsed');
}
parse 会为无效输入抛出 FormatException,而 tryParse 则返回 null。在处理用户输入时,请始终使用 tryParse。
$ dart main.dart Parsed pi: 3.14159 Try parse invalid: null
Double 比较
由于浮点数的精度问题,比较 double 需要特别小心。
main.dart
void main() {
double a = 0.1 + 0.2;
double b = 0.3;
print('Direct comparison: ${a == b}');
print('Precise comparison: ${(a - b).abs() < 1e-10}');
print('a: $a');
print('b: $b');
}
由于二进制表示,0.1 + 0.2 的结果并不完全等于 0.3。我们使用 epsilon 比较来获得浮点数的可靠结果。
$ dart main.dart Direct comparison: false Precise comparison: true a: 0.30000000000000004 b: 0.3
Double 方法
double 类型提供了有用的舍入和转换方法。
main.dart
void main() {
double value = 3.14159265359;
print('toStringAsFixed(2): ${value.toStringAsFixed(2)}');
print('toStringAsExponential(2): ${value.toStringAsExponential(2)}');
print('toStringAsPrecision(4): ${value.toStringAsPrecision(4)}');
print('round(): ${value.round()}');
print('floor(): ${value.floor()}');
print('ceil(): ${value.ceil()}');
print('truncate(): ${value.truncate()}');
}
这些方法有助于格式化和转换 double 值。toStringAsFixed 对于显示货币值特别有用。
$ dart main.dart toStringAsFixed(2): 3.14 toStringAsExponential(2): 3.14e+0 toStringAsPrecision(4): 3.142 round(): 3 floor(): 3 ceil(): 4 truncate(): 3
最佳实践
- 精度处理:请注意浮点数的精度限制。
- 比较:使用 epsilon 比较而不是直接相等比较。
- 解析:对于用户输入,请优先使用 tryParse 而不是 parse。
- 格式化:使用 toStringAsFixed 来获得一致的小数位数。
来源
本教程介绍了 Dart 的 double 类型,并通过实际示例演示了其特性和常见用法。
作者
列出 所有 Dart 教程。