ZetCode

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 解析

我们可以使用 parsetryParse 方法将字符串转换为 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

最佳实践

来源

Dart Double 文档

本教程介绍了 Dart 的 double 类型,并通过实际示例演示了其特性和常见用法。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十年以上的经验。

列出 所有 Dart 教程