使用标准Python库的分数模块,你可以进行分数(有理数)的计算。
在此解释如下。
- 分数的构造函数
- 获取分子和分母的整数值
- 分数的计算和比较(有理数)。
- 将分数转换为小数(浮动)。
- 分数到字符串(str)的转换
- 获得有理数的近似值
分数的构造函数
有几种方法来创建一个分数实例。在所有情况下,分数都会被自动分成若干个分数。
将分子和分母指定为整数
分别指定分子和分母为整数。如果省略分母,则假定其为1。
from fractions import Fraction print(Fraction(1, 3)) # 1/3 print(Fraction(2, 6)) # 1/3 print(Fraction(3)) # 3
小数部分 (float)
如果传递的是一个分数值,它将被转换为一个分数。
print(Fraction(0.25)) # 1/4 print(Fraction(0.33)) # 5944751508129055/18014398509481984
如果你希望通过指定一个最大分母来进行近似,请使用下面描述的limit_denominator()方法。
字符串 (str)
如果传递的是一个字符串值,它将被转换为一个分数。
print(Fraction('2/5')) # 2/5 print(Fraction('16/48')) # 1/3
获取分子和分母的整数值
类型为Fraction的属性允许你分别获得分子和分母的整数值。它们不能被改变。
numerator
denominator
a = Fraction(1, 3) print(a) # 1/3 print(a.numerator) print(type(a.numerator)) # 1 # <class 'int'> print(a.denominator) print(type(a.denominator)) # 3 # <class 'int'> # a.numerator = 7 # AttributeError: can't set attribute
分数的计算和比较(有理数)。
算术运算符可用于计算加法、减法等。
result = Fraction(1, 6) ** 2 + Fraction(1, 3) / Fraction(1, 2) print(result) print(type(result)) # 25/36 # <class 'fractions.Fraction'>
也可以使用比较运算符。
print(Fraction(7, 13) > Fraction(8, 15)) # True
将分数转换为小数(浮动)。
可以用float()将分数转换为小数。
a_f = float(a) print(a_f) print(type(a_f)) # 0.3333333333333333 # <class 'float'>
当用小数计算时,它被自动转换为浮点数类型。
b = a + 0.1 print(b) print(type(b)) # 0.43333333333333335 # <class 'float'>
分数到字符串(str)的转换
要转换为字符串,请使用str()。
a_s = str(a) print(a_s) print(type(a_s)) # 1/3 # <class 'str'>
获得有理数的近似值
有理数的近似值可以通过类型为Fraction的limit_denominator()方法获得。
返回分母小于或等于参数max_denominator的有理数(分数)。如果省略,max_denominator=1000000。
近似的无理数,如π和Napier数e
pi = Fraction(3.14159265359) print(pi) # 3537118876014453/1125899906842624 print(pi.limit_denominator(10)) print(pi.limit_denominator(100)) print(pi.limit_denominator(1000)) # 22/7 # 311/99 # 355/113 e = Fraction(2.71828182846) print(e) # 6121026514870223/2251799813685248 print(e.limit_denominator(10)) print(e.limit_denominator(100)) print(e.limit_denominator(1000)) # 19/7 # 193/71 # 1457/536
将循环小数转换为分数
a = Fraction(0.565656565656) print(a) # 636872674577009/1125899906842624 print(a.limit_denominator()) # 56/99 a = Fraction(0.3333) print(a) # 6004199023210345/18014398509481984 print(a.limit_denominator()) print(a.limit_denominator(100)) # 3333/10000 # 1/3