ZetCode

Dart Double

last modified June 4, 2025

In Dart, double is a built-in type representing 64-bit floating-point numbers. It conforms to the IEEE 754 standard for floating-point arithmetic.

Double values can represent both integer and fractional numbers. They are suitable for scientific calculations and measurements requiring precision.

Basic Double Declaration

The simplest way to create a double is by using literal notation.

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);
}

We declare three double variables with different values. Scientific notation can be used for very large or small numbers.

$ dart main.dart
23.5
9.99
123000.0

Double Operations

Doubles support standard arithmetic operations like addition and division.

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}');
}

This demonstrates basic arithmetic with double values. Note that division always returns a double, even for whole number results.

$ dart main.dart
Addition: 13.7
Subtraction: 7.3
Multiplication: 33.6
Division: 3.28125
Remainder: 0.9000000000000004
Power: 110.25

Double Parsing

We can convert strings to doubles using parse and tryParse methods.

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 throws FormatException for invalid input, while tryParse returns null. Always use tryParse when dealing with user input.

$ dart main.dart
Parsed pi: 3.14159
Try parse invalid: null

Double Comparison

Comparing doubles requires special care due to floating-point precision.

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');
}

Due to binary representation, 0.1 + 0.2 isn't exactly 0.3. We use an epsilon comparison for reliable results with floating-point numbers.

$ dart main.dart
Direct comparison: false
Precise comparison: true
a: 0.30000000000000004
b: 0.3

Double Methods

The double type provides useful methods for rounding and conversion.

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()}');
}

These methods help format and convert double values. toStringAsFixed is particularly useful for displaying currency values.

$ dart main.dart
toStringAsFixed(2): 3.14
toStringAsExponential(2): 3.14e+0
toStringAsPrecision(4): 3.142
round(): 3
floor(): 3
ceil(): 4
truncate(): 3

Best Practices

Source

Dart Double Documentation

This tutorial covered Dart's double type with practical examples demonstrating its features and common usage patterns.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Dart tutorials.