Python分数
Python分数模块
众所周知,小数是一个数字,代表一个整数,它被分为多个部分。
Python分数模块允许我们在Python程序中管理分数。
管理分数
在此Python帖子中,我们将管理分数并对其执行各种操作。
让我们开始吧。
创建分数
Python中的Fraction类允许我们以各种方式创建其实例。
这是一个示例程序:
import fractions for num, decimal in [(3, 2), (2, 5), (30, 4)]: fract = fractions.Fraction(num, decimal) print('{}/{} = {}'.format(num, decimal, fract))
让我们看一下该程序的输出:这意味着我们可以轻松地将分数转换为String并管理它以便在程序中进行调试。
另外,请注意,在最后的分数" 30/4"中,它会自动解析为最低形式的" 15/2"。
我们实际上还可以从其String表示形式创建一个分数,例如:
f = fractions.Fraction('2/7')
将小数转换为分数
也可以将小数转换为小数。
让我们看一下代码片段:
import fractions for deci in ['0.6', '2.5', '2.3', '4e-1']: fract = fractions.Fraction(deci) print('{0:>4} = {1}'.format(deci, fract))
让我们看一下该程序的输出:易于管理,对吧?但这是一个问题,不能完全转换为分数的十进制值可能会产生意外的结果,例如:
import fractions for v in [0.1, 0.5, 1.5, 2.0]: print('{} = {}'.format(v, fractions.Fraction(v)))
这将给出如下输出:注意" 0.1"表示形式的问题?让我们了解为什么会这样。
0.1表示的问题
众所周知,浮点数由两部分组成:一个整数和一个指数部分,其底数取整数并乘以整数部分。
"基数10"使数学运算和基数10一样非常容易,每个数字都可以很容易地显示出来。
0.5可以表示为5 x 10?¹。
因此,如果我们加上数字0.5和0.2,则结果将是0.7。
但是,计算机无法正常工作。
计算机使用Base 2而不是Base 10。
问题出现在可以用Base 10表示但不能用Base 2表示的数字上。
这些数字必须四舍五入到最接近的等值。
考虑到IEEE 64位浮点格式,最接近0.1的数字是" 3602879701896397 x 2 ???",最接近0.2的数字是" 7205759403792794 x 2 ???";将它们相加得到" 10808639105689191 x 2 ???",或者精确的十进制值" 0.3000000000000000444089209850062616169452667236328125"。
浮点数通常会四舍五入以显示。
算术运算
我们还可以很容易地用小数执行算术运算。
让我们在这里看一些例子。
执行数学运算
让我们构造一个简单的示例,说明如何使用小数执行算术运算。
这是一个示例程序:
import fractions f_one = fractions.Fraction(3, 5) f_two = fractions.Fraction(4, 9) print('{} + {} = {}'.format(f_one, f_two, f_one + f_two)) print('{} - {} = {}'.format(f_one, f_two, f_one - f_two)) print('{} * {} = {}'.format(f_one, f_two, f_one * f_two)) print('{}/{} = {}'.format(f_one, f_two, f_one/f_two))
让我们看一下该程序的输出:
获取分数部分
可能仅获得分数的分子或者分母。
让我们看一下如何做到这一点的代码片段:
import fractions fract = fractions.Fraction(221, 234) + fractions.Fraction(1, 2) print("Numerator: {}".format(fract.numerator)) print("Denominator: {}".format(fract.denominator))
进行近似
我们可以使用分数模块将数字近似并四舍五入为有理值。
这是一个示例程序:
import fractions import math print('Value of PI: {}'.format(math.pi)) pi_fraction = fractions.Fraction(str(math.pi)) print('Without limit: {}'.format(pi_fraction)) for num in [1, 6, 11, 60, 70, 90, 100]: limited = pi_fraction.limit_denominator(num) print('{0:8} = {1}'.format(num, limited))
让我们看一下该程序的输出:limit_denominator()函数查找并返回最接近的分母,该分母具有最大为num的分母。
四舍五入
可以通过分母中所需的位数四舍五入小数。
让我们看一下代码片段:
import fractions fract = fractions.Fraction('25/3') print('25/3 Rounded without limit : {}'.format(round(fract))) print('25/3 Rounded to 1 digit : {}'.format(round(fract, 1))) print('25/3 Rounded to 2 digits : {}'.format(round(fract, 2)))
让我们看一下该程序的输出:请注意,round()是Python的默认解释器函数,不需要任何导入。
将数学与分数混合
在最后一个示例中,我们将从数学库中引入一些函数,并将它们与小数表示形式进行混合。
像铺砌一小部分等。
让我们看一下代码片段:
import math from fractions import Fraction print("25/2 Square root is: {}".format(math.sqrt(Fraction(25, 4)))) print("28/3 Square root is: {}".format(math.sqrt(Fraction(28,3)))) print("4102/1193 Floored to: {}".format(math.floor(Fraction(4102, 1193)))) print("Pi/3 Sined Fraction: {}".format(Fraction(math.sin(math.pi/3)))) print("Pi/3 Sined Fraction Limit Dn.: {}".format(Fraction(math.sin(math.pi/3)).limit_denominator(10)))
让我们看一下该程序的输出:floor()函数仅将小数点后一位舍入并提供最接近的整数。