fractions 模块提供了对有理数运算的支持。

一个 Fraction 实例可以由一对整数、另一个有理数或字符串构造。

class fractions.Fraction(numerator=0, denominator=1)

解析:numerator 和 denominator 参数是 numbers.Rational 的实例,并且返回一个值为 numerator / denominator 的 Fraction 实例。如果 denominator 参数为 0,将抛出 ZeroDivisionError 异常。

class fractions.Fraction(other_fraction)

解析:other_fraction 参数(另一个分数)是 numbers.Rational 的实例,并返回具有相同值的 Fraction 实例。

class fractions.Fraction(float)

解析:返回一个与 float 参数具有相同值的 Fraction 实例。

注意:由于众所周知的浮点数问题,导致 Fraction(1.1) 并不完全等于 11 / 10,所以 Fraction(1.1) 也不会返回 Fraction(11, 10)。

class fractions.Fraction(decimal)

解析:返回一个与 decimal.Decimal 参数具有相同值的 Fraction 实例。

注意:由于众所周知的浮点数问题,导致 Fraction(1.1) 并不完全等于 11 / 10,所以 Fraction(Decimal(1.1)) 也不会返回 Fraction(11, 10)。

class fractions.Fraction(string)

解析:参数是一个 string 或 unicode 实例,其常见形式如下。

  1. [sign] numerator [‘/’ denominator]

复制代码
可选的 sign 可以是 + 或 -,然后 numerator 和 denominator(可选)是十进制数字。

无论哪种形式,输入字符串都可能有前导和/或尾随空格。

下面是一些例子,大家可以参考一下 fraction 模块的用法:

  1. >>> from fractions import Fraction
  2. >>> Fraction(16, -10)
  3. Fraction(-8, 5)
  4. >>> Fraction(123)
  5. Fraction(123, 1)
  6. >>> Fraction()
  7. Fraction(0, 1)
  8. >>> Fraction(‘3/7’)
  9. Fraction(3, 7)
  10. >>> Fraction(‘ -3/7 ‘)
  11. Fraction(-3, 7)
  12. >>> Fraction(‘1.414213 \t\n’)
  13. Fraction(1414213, 1000000)
  14. >>> Fraction(‘-.125’)
  15. Fraction(-1, 8)
  16. >>> Fraction(‘7e-6’)
  17. Fraction(7, 1000000)
  18. >>> Fraction(2.25)
  19. Fraction(9, 4)
  20. >>> Fraction(1.1)
  21. Fraction(2476979795053773, 2251799813685248)
  22. >>> from decimal import Decimal
  23. >>> Fraction(Decimal(‘1.1’))
  24. Fraction(11, 10)

复制代码
Fraction 类继承自抽象基类 numbers.Rational,并实现该类的所有方法和操作。

Fraction 实例是可哈希的,所以应该被视为不可变对象。

另外,Fraction 拥有下面这些属性和方法:

numerator

分数的分子。

denominator

分数的分母。

from_float(flt)

构造并返回一个分数,用于表示 flt 参数的确切值。

flt 参数必须是一个浮点数。

注意:由于众所周知的浮点数问题,Fraction.from_float(0.3) 跟 Fraction(3, 10) 不是相同值。

from_decimal(dec)

构造并返回一个分数,用于表示 dec 参数的确切值。

dec 参数必须是一个 decimal.Decimal 实例。

limit_denominator(max_denominator=1000000)

查找并返回与自身最接近的分数,max_denominator 参数指定分母可以接受的最大值。

这种方法对于寻找给定浮点数的有理逼近是有很用的:

  1. >>> from fractions import Fraction
  2. >>> Fraction(‘3.1415926535897932’).limit_denominator(1000)
  3. Fraction(355, 113)

复制代码
或者用于恢复表示为浮点数的有理数:

  1. >>> from math import pi, cos
  2. >>> Fraction(cos(pi/3))
  3. Fraction(4503599627370497, 9007199254740992)
  4. >>> Fraction(cos(pi/3)).limit_denominator()
  5. Fraction(1, 2)
  6. >>> Fraction(1.1).limit_denominator()
  7. Fraction(11, 10)

复制代码
__floor__()

返回一个小于或等于 self 的最大整数。

也可以通过 math.floor() 函数来实现该方法:

  1. >>> from math import floor
  2. >>> floor(Fraction(355, 113))
  3. 3

复制代码
__ceil__()

返回一个大于或等于 self 的最小整数。

也可以通过 math.ceil() 函数来实现该方法。

__round__()

返回一个最接近 self 的整数,四舍五入。

__round__(ndigits)

返回一个最接近 self 的有理数,ndigits 参数指定小数部分四舍五入的位数。

先介绍Fraction–处理分数类

它会将所传入的参数进行计算并输出分数形式,且会自动约分。如果有负数,则负号自动归于分子。

from fractions import Fraction

print(Fraction(2,-4)) #传入整数

# -1/2

#如果结果为Fraction(1,2),则只需使用str()函数即可 

from fractions import Fraction

print(Fraction('1.5')) #传入字符型的浮点数

# 3/2
from fractions import Fraction

print(Fraction(1.5)) #传入浮点数

#3/2



#但如果浮点数不是.5形式,即 .1 .2 ... .7 .9

#就会出错,这是因为float本身的浮点数据不准确导致的



print(Fraction(1.1))

#2476979795053773/2251799813685248



#解决办法就是引入decimal模块

from fractions import Fraction

from decimal import Decimal

#Decimal所传入的参数不能以浮点数,原因一致

x = '1.1'

x = Decimal(x)

print(Fraction(x))

# 11/10



#所以如果要传入一浮点数,最好先将其转化成字符型
接下来是其特性在二元运算的体现
from fractions import Fraction



x = Fraction(1,2)

y = Fraction(2,5)

print(x+y)

# 9/10 --- 分数相加得分数



x = Fraction(1,2)

y = 1

print(x+y)

# 3/2 --- 分数加整数得分数



x = Fraction(1,2)

y = 1.2

print(x+y)

# 1.7 --- 分数加浮点数得浮点数



#减法 乘法 除法与加法相同



#乘方

print(Fraction(1,4)**2)

# 1/16 ---作底数 且指数为整数时 返回分数

print(Fraction(1,4)**Fraction(1,2))

# 0.5 ---底数指数同时是时 返回浮点数

print(Fraction(1,4)**0.5)

# 0.5 ---作底数 且指数为浮点数时 返回浮点数

print(0.25**Fraction(1,2))

# 0.5 ---作指数 且指数为浮点数时 返回浮点数

print(4**Fraction(1,2))

# 2.0 ---作指数 且指数为整数时 返回浮点数
获取Fraction对象属性
from fractions import Fraction



x = Fraction(1,2)

print(x.numerator)

# 1 ---获取分子



print(x.denominator)

# 2 ---获取分母
求最大公约数
import fractions

print(fractions.gcd(66,33))

# 33

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据