A package that helps you dealing with fractions and mixed fractions.
https://pub.dev/packages/fraction
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, 1); // 3
-
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 final frac5 = Fraction.fromString("¼"); // 1/4
-
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.fromDouble(-8.5); // -17/2 final frac3 = Fraction.fromDouble(math.pi); // 208341/66317 final frac4 = Fraction.fromDouble(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 onlyprecison
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
Note that a Fraction
object is immutable so methods that require changing the internal state of the object return a new instance. For example, reduce()
method reduces the fraction to the lowest terms but it returns a new instance:
final fraction = Fraction.fromString("12/20"); // 12/20
final reduced = fraction.reduce(); // now it's simplified to 3/5
Fraction strings can be encoded to unicode fraction glyphs when possible.
final fractionGlyph = encodeFractionGlyphs('1/2'); // ½
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
). Be sure to check out the official documentation at pub.dev for a complete overview of the API.
A mixed fraction is made up of a whole part and a proper fraction (a fraction in which numerator <= denominator). Building MixedFraction
objects can't be easier:
final mixed1 = MixedFraction(
whole: 3,
numerator: 4,
denominator: 7
);
final mixed2 = MixedFraction.fromDouble(1.5);
final mixed3 = MixedFraction.fromString("1 1/2");
There is also the possibility to initialize a MixedFraction
using extension methods, as it happens with Fraction
:
final mixed = "1 1/2".toMixedFraction();
Note that MixedFraction
objects are immutable exactly like Fraction
objects so you're guaranteed that the internal state of the instance won't change during its lifetime. Make sure to check out the official documentation at pub.dev for a complete overview of the API.