fraction 1.1.0

  • Readme
  • Changelog
  • Example
  • Installing
  • 71

fraction #

A package that helps you dealing with mathematical fractions.

  • Fraction which represents fractions in the form a/b;
  • MixedFraction which represents mixed fractions in the form a b/c

Working with fractions #

You can create an instance of Fraction using one of its constructors.

  • Basic: it just requires the numerator and/or the denominator.

    final frac = Fraction(3, 5); // 3/5
    final frac = Fraction(3, 5); // 3/1
  • String: pass the fraction as a string but it has to be well-formed otherwise an exception is thrown.

    final frac1 = Fraction.fromString("2/4"); // 2/4
    final frac2 = Fraction.fromString("-2/4"); // -2/4
    final frac3 = Fraction.fromString("2/-4"); // Error
    final frac4 = Fraction.fromString("-2"); // -2/1
  • double: represents a double as a fraction. Note that irrational numbers cannot be converted into a fraction by definition; the constructor has the precision parameter which decides how precise the representation has to be.

    final frac1 = Fraction.fromDouble(1.5); // 3/2
    final frac2 = Fraction.fromString(-8.5); // -17/2
    final frac3 = Fraction.fromString(math.pi); // 208341/66317
    final frac4 = Fraction.fromString(math.pi, 1.0E-4); // 333/106

    The constant pi cannot be represented as a fraction because it's an irrational number. The constructor considers only precison decimal digits to create a fraction. With rational numbers instead you don't have problems.

Thanks to extension methods you can also create a Fraction object "on the fly" by calling the toFraction() method on a number or a string.

final f1 = 5.toFraction(); // 5/1
final f2 = 1.5.toFraction(); // 3/2
final f3 = "6/5".toFraction(); // 6/5

The class has a rich API that overloads a lot of operators, for arithmetics and comparisons. The method reduces reduces the fraction to the lowest terms.

final fraction = Fraction.fromString("12/20"); // 12/20
fraction.reduce(); // now it's simplified to  3/5

Two fractions are equal if their "cross product" is equal. For example 1/2 and 3/6 are said to be equivalent because 1*6 = 3*2 (and in fact 3/6 is the same as 1/2). You can get the numerator and the denominator either with getters...

    final fraction = Fraction(3, 10);
    final num = fraction.numerator; // 3
    final den = fraction.denominator; // 10

... or with the [] operator:

    final fraction = Fraction(3, 10);
    final num = fraction[0]; // 3
    final den = fraction[1]; // 10

Working with mixed fractions #

A mixed fraction is made up of a whole part and a proper fraction (a fraction in which numerator <= denominator). It's easy to build a MixedFraction object:

final f1 = MixedFraction(3, 4, 7);
final f2 = MixedFraction.fromDouble(1.5);
final f3 = MixedFraction.fromString("1 1/2");

There is also the possibility to initialize a MixedFraction using extension methods:

final f1 = "1 1/2".toMixedFraction();

If you try to create an instance in which the numerator is greater than the denominator, a MixedFractionException is thrown.

[1.1.0] #

  • Added support for operator [](int index)

[1.0.1] #

  • Fixed some health suggestions.
  • Added a few examples in the repository.

[1.0.0] #

  • Fraction and MixedFraction have been released.
  • added support to extension methods to create helpers for num and string.


Examples #

  • fraction - examples on how to use the Fraction class.
  • mixed - examples on how to use the MixedFraction class.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:

  fraction: ^1.1.0

2. Install it

You can install packages from the command line:

with Flutter:

$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:

import 'package:fraction/fraction.dart';
Describes how popular the package is relative to other packages. [more]
Code health derived from static analysis. [more]
Reflects how tidy and up-to-date the package is. [more]
Weighted score of the above. [more]
Learn more about scoring.

We analyzed this package on Jul 9, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.8.4
  • pana: 0.13.14
  • Flutter: 1.17.5

Analysis suggestions

Package not compatible with SDK dart


  • fraction that is a package requiring null.


Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.7.0 <3.0.0
flutter 0.0.0
Transitive dependencies
collection 1.14.12 1.14.13
meta 1.1.8 1.2.2
sky_engine 0.0.99
typed_data 1.1.6 1.2.0
vector_math 2.0.8 2.1.0-nullsafety
Dev dependencies