💔

【Flutter】fractionパッケージを使って分数と帯分数を簡単に扱う

2022/10/09に公開

はじめに

fractionパッケージを使うことで、分数と帯分数を簡単に扱うことができます。

例えば、整数や小数を分数や帯分数に変換したり、分数同士で計算したりといったことができます。

fractionパッケージの使い方

fractionパッケージでは、Fraction型は分数とMixedFraction型が用意されています。

変換

fromString()

fromString()を使うことで、String型から変換することができます。

// Fraction
Fraction.fromString('1/2'); // 1/2
Fraction.fromString('-1/3'); // -1/3
Fraction.fromString('-2'); // -2
Fraction.fromString('2/-5'); // Error
Fraction.fromString('/3'); // Error

// MixedFraction
MixedFraction.fromString('1 1/2'); // 1 1/2
MixedFraction.fromString('-1 1/3'); // -1 1/3
MixedFraction.fromString('1 2/-5'); // Error
MixedFraction.fromString('-2'); // Error
MixedFraction.fromString('1/3'); // Error

fromDouble()

fromDouble()を使うことで、Double型から変換することができます。

// Fraction
Fraction.fromDouble(1.5); // 3/2
Fraction.fromDouble(-1.5); // -3/2
Fraction.fromDouble(1.0); // 1
Fraction.fromDouble(3); // 3

// MixedFraction
MixedFraction.fromDouble(1.5); // 1 1/2
MixedFraction.fromDouble(-1.5); // -1 2/5
MixedFraction.fromDouble(1.0); // 1 0/1
MixedFraction.fromDouble(3); // 3 0/1

toFraction(), toMixedFraction()

String型やDouble型に対して、toFraction(), toMixedFraction()を使うことで、Fraction, MixedFractionへ変換することができます。

// Fraction
'2/5'.toFraction(); // 2/5
'1'.toFraction(); // 2/5
1.5.toFraction(); // 3/2
1.toFraction(); // 1
3.0.toFraction(); // 3

// MixedFraction
'1 2/5'.toMixedFraction(); // 1 2/5
1.5.toMixedFraction(); // 1 1/2
1.toMixedFraction(); // 1
3.0.toMixedFraction(); // 3

また、Fraction型, MixedFraction型に対してtoFraction(), toMixedFraction()を使うこともできます。

// Fraction.toMixedFraction()
'2/5'.toFraction().toMixedFraction(); // 2/5
'1'.toFraction().toMixedFraction(); // 1 0/1
1.5.toFraction().toMixedFraction(); // 1 1/2
1.toFraction().toMixedFraction(); // 1 0/1
3.0.toFraction().toMixedFraction(); // 3 0/1

// MixedFraction.toFraction()
'1 2/5'.toMixedFraction().toFraction(); // 7/5
1.5.toMixedFraction().toFraction(); // 3/2
1.toMixedFraction().toFraction(); // 1
3.0.toMixedFraction().toFraction(); // 3

Rational.tryParse()

Rational.tryParse()を使うことで、Fraction型かMixedFraction型のどちらかを解析し変換することができます。

もし、Fraction型にもMixedFraction型にも変換できない際にはnullを返してくれます。

Rational.tryParse('2/5'); // 2/5 (Fraction)
Rational.tryParse('3/2'); // 3/2 (Fraction)
Rational.tryParse('2'); // 2 (Fraction)
Rational.tryParse('1 1/2'); // 1 1/2 (MixedFraction)
Rational.tryParse(''); // null
Rational.tryParse('壱'); // null

reduce()

reduce()を使うことで、Fraction, MixedFractionを約分することができます。

'6/10'.toFraction().reduce(); // 3/5
'1 4/10'.toMixedFraction().reduce(); // 1 2/5

計算

Fraction同士もしくは、MixedFraction同士であれば四則演算を行うことができます。

以下は足し算の例です。

final a = '1/4'.toFraction();
final b = '2/4'.toFraction();
final c = '1 2/4'.toMixedFraction();

final sumA = a + b; // 12/16
final reducedSumA = sum.reduce(); // 3/4

final sumB = a.toMixedFraction() + c; // 1 12/16
final reducedSumB = sumB.reduce(); // 1 3/4

参考

https://pub.dev/packages/fraction
https://github.com/albertodev01/fraction
https://matsumarudesu.com/flutter-dart-fraction/

Discussion