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 教程。