📜  Python中的分数模块Fraction

📅  最后修改于: 2020-04-10 04:33:13             🧑  作者: Mango

该模块支持有理数算法。它允许从整数,浮点数,数字,小数和字符串创建Fraction实例。
分数实例:分数实例可以由一对整数,另一个有理数或字符串构造。分数实例是可哈希的,应视为不可变的。

  1. class fractions.Fraction(numerator = 0,denominator = 1):这要求分子和分母是数字的实例有理数,返回值=(分子/分母)的分数实例。如果分母= 0,则会产生零除错误。
    from fractions import Fraction
    print Fraction(11, 35)
    # 返回 Fraction(11, 35)
    print Fraction(10, 18)
    # 返回 Fraction(5, 9)
    print Fraction()
    # 返回 Fraction(0, 1)

    输出:

    11/35
    5/9
    0
  2. 类fractions.Fraction(other_fraction):这要求other_fraction是numbers.Rational对象并返回与相同的值的小数。
  3. class fractions.Fraction(float):这需要float实例,并返回具有相同值的分数实例。
    from fractions import Fraction
    print Fraction(1.13)
    # 返回 Fraction(1272266894732165, 1125899906842624)

    输出:

    1272266894732165/1125899906842624

    4.class fractions.Fraction(decimal):这需要十进制实例,并返回具有相同值的分数实例。

    from fractions import Fraction
    print Fraction('1.13')
    # 返回 Fraction(113, 100)

    输出:

    113/100

    5.class fractions.Fraction(string)类:这需要字符串或unicode实例,并返回具有相同值的分数实例。此实例的形式: [符号]分子[‘/’分母]
    在这里,符号表示’+’或’-‘,分子和分母是数字的字符串。

    from fractions import Fraction
    print Fraction('8/25')
    # 返回 Fraction(8, 25)
    print Fraction('1.13')
    # 返回 Fraction(113, 100)
    print Fraction('3/7')
    # 返回 Fraction(3, 7)
    print Fraction('1.414213 \t\n')
    # 返回 Fraction(1414213, 1000000)

    输出:

    8/25
    113/100
    3/7
    1414213/1000000

    6.limit_denominator(max_denominator = 1000000):

    • 该方法对于找到给定浮点数的有理逼近很有用。
    • 此模块查找并返回最接近分母最大为max_denominator的自身的分数。
      from fractions import Fraction
      print Fraction('3.14159265358979323846')
      # 返回 Fraction(157079632679489661923, 50000000000000000000)
      print Fraction('3.14159265358979323846').limit_denominator(10000)
      # 返回 Fraction(355, 113)
      print Fraction('3.14159265358979323846').limit_denominator(100)
      # 返回 Fraction(311, 99)
      print Fraction('3.14159265358979323846').limit_denominator(10)
      # returns Fraction(22, 7)
      print Fraction(125, 50).numerator
      # 返回 5
      print Fraction(125, 50).denominator
      # 返回 2

      输出:

      157079632679489661923/50000000000000000000
      355/113
      311/99
      22/7
      5
      2

      对分数执行数学运算 

      from fractions import Fraction
      print Fraction(113, 100) + Fraction(25, 18)
      # 返回 Fraction(2267, 900)
      print Fraction(18, 5) / Fraction(18, 10)
      # 返回 Fraction(2, 1)
      print Fraction(18, 5) * Fraction(16, 19)
      # 返回 Fraction(288, 95)
      print Fraction(18, 5) * Fraction(15, 36)
      # 返回 Fraction(3, 2)
      print Fraction(12, 5) ** Fraction(12, 10)
      # 返回 2.8592589556010197

      输出: 

      2267/900
      2
      288/95
      3/2
      2.8592589556

      使用数学math模块的各种功能进行基于分数的计算 

      import math
      from fractions import Fraction
      print math.sqrt(Fraction(25, 4))
      # 返回 2.5
      print math.sqrt(Fraction(28,3))
      # 返回 3.0550504633038935
      print math.floor(Fraction(3558, 1213))
      # 返回 2
      print Fraction(math.sin(math.pi/3))
      # 返回 Fraction(3900231685776981, 4503599627370496)
      print Fraction(math.sin(math.pi/3)).limit_denominator(10)
      # 返回 Fraction(6, 7)

      输出: 

      2.5
      3.0550504633
      2.0
      3900231685776981/4503599627370496
      6/7