Flutter大分数显示插件big_fraction的使用
Flutter大分数显示插件big_fraction的使用
Fork of fraction包。
这是一个用于分数计算的Dart/Flutter插件。这个分支使用BigInt
来表示分数的分子和分母。
与原始分数包的区别
该插件使用BigInt
而不是int
来表示分数的分子和分母。在处理较大的分数时,特别是在Web环境中,精度问题是一个常见问题。使用BigInt
可以解决这个问题,但会占用更多的内存。
分数操作
你可以使用以下构造函数之一来创建一个BigFraction
实例:
默认构造函数
BigFraction(BigInt.one, BigInt.two); // 1/2
BigFraction(BigInt.from(3), BigInt.one); // 3
from构造函数
BigFraction.from(3, 5); // 3/5
BigFraction.from(3, 1); // 3
fromString构造函数
BigFraction.fromString("2/4"); // 2/4
BigFraction.fromString("-2/4"); // -2/4
BigFraction.fromString("2/-4"); // 抛出异常
BigFraction.fromString("-2"); // -2/1
BigFraction.fromString("/3"); // 错误
fromDouble构造函数
BigFraction.fromDouble(1.5); // 3/2
BigFraction.fromDouble(-8.5); // -17/2
BigFraction.fromDouble(math.pi); // 208341/66317
BigFraction.fromDouble(math.pi, precision: 1.0e-4); // 333/106
注意,常量pi
不能被表示为分数,因为它是一个无理数。构造函数只考虑给定的小数位来生成分数。
扩展方法
你还可以通过调用数字或字符串上的toBigFraction()
扩展方法来创建一个BigFraction
对象:
5.toBigFraction(); // 5/1
1.5.toBigFraction(); // 3/2
"6/5".toBigFraction(); // 6/5
注意,BigFraction
对象是不可变的,因此需要更改对象内部状态的方法将返回一个新的实例。例如,reduce()
方法会将分数简化到最简形式,并返回一个新的实例:
final fraction = BigFraction.fromString("12/20"); // 12/20
final reduced = fraction.reduce(); // 3/5
Unicode符号转换
BigFraction
字符串可以转换为Unicode符号(如果可能的话):
BigFraction.fromGlyph("¼"); // BigFraction(1, 4)
BigFraction(1, 2).toStringAsGlyph(); // "½"
基本算术运算
你可以通过算术运算符轻松地进行加、减、乘、除操作:
final f1 = BigFraction(5, 7);
final f2 = BigFraction(1, 5);
final sum = f1 + f2; // 5/7 + 1/5
final sub = f1 - f2; // 5/7 - 1/5
final mul = f1 * f2; // 5/7 * 1/5
final div = f1 / f2; // 5/7 / 1/5
常见操作
BigFraction
类型具有广泛的API,包括常见的分数操作:
BigFraction(10, 2).toDouble(); // 5.0
BigFraction(10, 2).inverse(); // 2/10
BigFraction(1, 15).isWhole; // false
BigFraction(2, 3).negate(); // -2/3
BigFraction(1, 15).isImproper; // false
BigFraction(1, 15).isProper; // true
// 通过索引访问分子和分母
final fraction = BigFraction(-7, 12);
print('${fraction[0]}'); // -7
print('${fraction[1]}'); // 12
任何其他索引值(除了0和1)都会抛出BigFractionException
异常。两个分数相等当且仅当它们的交叉乘积相等。例如,1/2
和3/6
被认为是等价的,因为1*6 = 3*2
(实际上3/6
等于1/2
)。
混合分数操作
混合分数由整数部分和真分数(分子小于等于分母的分数)组成。构建一个MixedBigFraction
对象非常简单:
MixedBigFraction(
whole: 3,
numerator: 4,
denominator: 7
);
与普通分数一样,你也可以使用各种命名构造函数:
MixedBigFraction.fromDouble(1.5);
MixedBigFraction.fromString("1 1/2");
还可以使用扩展方法初始化MixedBigFraction
:
final mixed = "1 1/2".toMixedBigFraction();
注意,MixedBigFraction
对象也是不可变的,就像BigFraction
对象一样,因此保证实例的内部状态不会改变。确保查阅官方文档以获得完整的API概述。
埃及分数
埃及分数是一组不同的分数之和,其中分子始终为1,分母是正数,所有分母互不相同。例如:
5/8 = 1/2 + 1/8 (其中"1/2 + 1/8"是埃及分数)
换句话说,埃及分数是由形式为1/x的分数组成的和,这些分数表示一个真分数或假分数。以下是它们的计算方法:
final egyptianBigFraction1 = BigFraction(5, 8).toEgyptianBigFraction();
print("$egyptianBigFraction1"); // 输出 "1/2 + 1/8"
final egyptianBigFraction2 = MixedBigFraction(2, 4, 5).toEgyptianBigFraction();
print("$egyptianBigFraction2"); // 输出 "1 + 1 + 1/2 + 1/4 + 1/20"
compute()
方法返回一个可迭代对象。
注意事项
BigFraction
和MixedBigFraction
都继承自BigRational
类型,这允许使用单个方法调用来解析这两种类型的分数:
// 这是一个 'BigFraction' 对象
Rational.tryParse('1/5'); // 1/5
// 这是一个 'MixedBigFraction' 对象
Rational.tryParse('2 4/7'); // 2 4/7
// 这是 'null' 因为字符串不表示分数或混合分数
Rational.tryParse(''); // null
更多关于Flutter大分数显示插件big_fraction的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter大分数显示插件big_fraction的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
big_fraction
是一个用于处理大分数(分数形式的大数)的 Flutter 插件。它允许你在 Flutter 应用中以分数的形式表示和操作大数,适用于需要高精度计算的场景。
以下是使用 big_fraction
插件的基本步骤和示例:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 big_fraction
插件的依赖:
dependencies:
flutter:
sdk: flutter
big_fraction: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入包
在你的 Dart 文件中导入 big_fraction
包:
import 'package:big_fraction/big_fraction.dart';
3. 创建大分数
你可以使用 BigFraction
类来创建大分数。BigFraction
支持多种构造函数:
BigFraction.fromInt(numerator, denominator)
:从分子和分母创建分数。BigFraction.fromDouble(value)
:从浮点数创建分数。BigFraction.fromString(str)
:从字符串创建分数。
示例:
// 从分子和分母创建分数
BigFraction fraction1 = BigFraction.fromInt(3, 4);
// 从浮点数创建分数
BigFraction fraction2 = BigFraction.fromDouble(0.75);
// 从字符串创建分数
BigFraction fraction3 = BigFraction.fromString('3/4');
4. 操作大分数
big_fraction
提供了一系列方法来操作分数,例如加法、减法、乘法、除法等。
示例:
BigFraction a = BigFraction.fromInt(3, 4);
BigFraction b = BigFraction.fromInt(1, 2);
// 加法
BigFraction sum = a + b;
// 减法
BigFraction difference = a - b;
// 乘法
BigFraction product = a * b;
// 除法
BigFraction quotient = a / b;
print('Sum: $sum'); // 输出: Sum: 5/4
print('Difference: $difference'); // 输出: Difference: 1/4
print('Product: $product'); // 输出: Product: 3/8
print('Quotient: $quotient'); // 输出: Quotient: 3/2
5. 格式化输出
你可以将 BigFraction
对象转换为字符串或其他格式:
BigFraction fraction = BigFraction.fromInt(3, 4);
// 转换为字符串
String str = fraction.toString(); // 输出: 3/4
// 转换为浮点数
double value = fraction.toDouble(); // 输出: 0.75
// 转换为百分数
String percentage = fraction.toPercentageString(); // 输出: 75%
6. 其他功能
big_fraction
还提供了其他一些功能,例如简化分数、比较分数、检查分数是否为整数等。
示例:
BigFraction fraction = BigFraction.fromInt(6, 8);
// 简化分数
BigFraction simplified = fraction.reduce(); // 输出: 3/4
// 检查分数是否为整数
bool isInteger = fraction.isInteger; // 输出: false
// 比较分数
BigFraction other = BigFraction.fromInt(3, 4);
bool isEqual = fraction == other; // 输出: false
7. 完整示例
以下是一个完整的 Flutter 示例,展示了如何使用 big_fraction
插件:
import 'package:flutter/material.dart';
import 'package:big_fraction/big_fraction.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('BigFraction Example')),
body: Center(
child: FractionExample(),
),
),
);
}
}
class FractionExample extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
BigFraction a = BigFraction.fromInt(3, 4);
BigFraction b = BigFraction.fromInt(1, 2);
BigFraction sum = a + b;
BigFraction product = a * b;
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Fraction A: $a'),
Text('Fraction B: $b'),
Text('Sum: $sum'),
Text('Product: $product'),
],
);
}
}