fractions模块

fractions模块提供了分数类型的支持。

Fraction类

该类是fractions模块的核心,它继承了numbers.Rational类并且实现了该类所有的方法。

构造函数并不复杂:

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

class fractions.Fraction(int|float|str|Decimal|Fraction)

可以同时提供分子(numerator)和分母(denominator)给构造函数用于实例化Fraction类,但两者必须同时是int类型或者numbers.Rational类型,否则会抛出类型错误。当分母为0,初始化的时候会导致抛出异常ZeroDivisionError。

而如果只提供一个参数,则可以用上述五种类型进行初始化。当使用字符串进行初始化时,fractions模块使用内置的正则表达式进行匹配。而使用浮点数或者Decimal进行初始化时,fractions模块会在内部调用as_integer_ratio()。

下面的代码示例来自官方文档,展示了各种实例化Fraction的方式:

>>> from fractions import Fraction

>>> Fraction(16, -10)

Fraction(-8, 5)

>>> Fraction(123)

Fraction(123, 1)

>>> Fraction()

Fraction(0, 1)

>>> Fraction('3/7')

Fraction(3, 7)

>>> Fraction(' -3/7 ')

Fraction(-3, 7)

>>> Fraction('1.414213 \t\n')

Fraction(1414213, 1000000)

>>> Fraction('-.125')

Fraction(-1, 8)

>>> Fraction('7e-6')

Fraction(7, 1000000)

>>> Fraction(2.25)

Fraction(9, 4)

>>> Fraction(1.1)

Fraction(2476979795053773, 2251799813685248)

>>> from decimal import Decimal

>>> Fraction(Decimal('1.1'))

Fraction(11, 10)

限制分母

fractions.Fraction.limit_denominator(max_denominator=1000000)

有时候将浮点数或者Decimal作为Fraction实例的初始化数据可能会遇到舍入误差的问题,如上面调用Fraction(1.1)时不返回Fraction(11, 10)的例子。这时Fraction类提供了一个实例方法limit_denominator()用于减小这种误差。这个方法本来是为了通过限制分母来得到一个近似值,但是在出现舍入误差的时候反倒使得结果更加精确了,如下面的例子:

>>> from fractions import Fraction

>>> Fraction(1.1)

Fraction(2476979795053773, 2251799813685248)

>>> Fraction(1.1).limit_denominator()

Fraction(11, 10)

将Fraction用于算术运算、关系运算和其他多种操作

上面提到,Fraction类继承了numbers.Rational类并且实现了该类所有的方法。所以Fraction类事实上通过重载很多特殊函数,使得其实例可以直接用于多种算术运算。

不仅支持算术运算,Fraction类同时也支持关系运算、pickle模块、copy模块和哈希值的计算。

>>> from fractions import Fraction

>>> x = Fraction(1, 2)

>>> y = Fraction(1, 3)

>>> x + y

Fraction(5, 6)

>>> x - y

Fraction(1, 6)

>>> x * y

Fraction(1, 6)

>>> x / y

Fraction(3, 2)

>>> x ** 2

Fraction(1, 4)

>>> -x

Fraction(-1, 2)

>>> abs(x)

Fraction(1, 2)

>>> round(x)

0

>>> import math

>>> math.floor(x)

0

>>> math.ceil(x)

1

>>> x == y

False

>>> x > y

True

其他函数

fractions.Fraction.from_float(flt)

fractions.Fraction.from_decimal(dec)

在Python3.2之前,Fraction类不支持通过将浮点数和Decimal传入构造方法来获得实例。而是提供了上面两个类方法,通过调用类方法的方式来产生实例,目前版本(Python 3.6.1)这两个类方法仍然存在。

fractions.gcd(a, b)

用于计算最大公约数。这个函数在Python3.5之后就废弃了,官方建议使用math.gcd()。

python中number函数_python-1:Number数字类型 之三 相关函数 Fraction相关推荐

  1. python中input()函数的返回是什么类型_Python中input函数的用法是什么?

    "input()"函数是输入函数,用于接受一个标准输入数据,且返回string类型.在Python3中,去除了"raw_input()"函数,仅保留了" ...

  2. python中choice函数_Python中choice函数的实现方法

    Python中choice函数的实现方法 发布时间:2020-12-15 09:28:06 来源:亿速云 阅读:82 作者:小新 这篇文章主要介绍Python中choice函数的实现方法,文中介绍的非 ...

  3. python中pop函数_Python中的Pop函数

    python中pop函数 什么是弹出功能? (What is the pop function?) The method pop() removes and returns the last elem ...

  4. python中factor函数_Python入门-函数

    函数 在维基百科上函数式这样描述的: 函数在数学中为两集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素. 此处的函数区别于我们数学上的函数,在编程世界中,函数(Funct ...

  5. python中mat函数_Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...

  6. python中set函数_python中set()函数简介及实例解析

    set函数也是python内置函数的其中一个,属于比较基础的函数.其具体介绍和使用方法,下面进行介绍. set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并 ...

  7. python中property函数_python 邮件表格Python中property函数用法实例分析

    本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...

  8. python中help函数_Python help()函数

    python中help函数 Python help() function is used to get the documentation of specified module, class, fu ...

  9. python中exp函数_python中exp函数如何实现指数计算?

    原标题:python中exp函数如何实现指数计算? 之前小编向大家介绍过python中的对数函数log函数(https://www.py.cn/jishu/jichu/21780.html),对于有点 ...

最新文章

  1. 基于Flink SQL构建流批一体实时数仓
  2. 位操作符:位与、|位或、^异或、~求反、左移位、带符号右移位、无符号右移位...
  3. 一个网卡下设置两个ip地址
  4. Angular里遇到的一个依赖注入问题以及解决办法
  5. win7下 apache2.2 +php5.4 环境搭建
  6. php 反射对象属性,php面向对象之反射功能的用法详解
  7. 虚拟化服务器的管理与维,服务器虚拟化管理
  8. springcloud使用restTemplate进行服务调用
  9. 特斯拉计划在2023年推出2.5万美元电动汽车,或无方向盘
  10. std::thread
  11. 汽车品牌查询及车型大全查询
  12. 电吉他效果器音频处理(1)——失真效果器、超载失真效果器、移相效果器、弗兰格效果器
  13. python程序文件的扩展名是-python脚本文件的扩展名是什么
  14. 教师评计算机课缺点及建议,评课用语优缺点及建议
  15. 使用DBeaver连接mysql报Access denied for user ‘test‘@‘%‘ to database
  16. C语言——宏定义及保留n位小数
  17. WT588E语音芯片+数码管的应用场景介绍
  18. 江湖中常说的“网格交易法”到底是什么?
  19. 一年之计在于春,一日之计在于晨,劲爆
  20. autojs学习笔记

热门文章

  1. 2022天梯L1-L2题解
  2. (亲测可行)charles抓包夜神模拟器保姆级教程
  3. PhpStudy在nginx下配置虚拟主机和伪静态
  4. 【刷题】洛谷 P2675 《瞿葩的数字游戏》T3-三角圣地
  5. 风格迁移1-00:Liquid Warping GAN(Impersonator)-目录-史上最新无死角讲解
  6. np.power与np.linalg.inv
  7. 07.图6 旅游规划 [Dijkstra 算法]
  8. Java Swing写简单计算器以及拓展贷款计算器(等额本息和等额本金计算可以单独拿出来用)
  9. redis的zset为什么用跳表不用红黑树
  10. 高等数学——求解不定积分的经典换元法