首页 > 编程语言 >Python-数值类型

Python-数值类型

时间:2024-03-04 12:12:48浏览次数:35  
标签:Python Decimal random 数值 浮点数 Fraction 类型 decimal 小数

数值类型

1. 内置数值工具

  • 内置数学函数:
    • pow:计算幂
    • abs:计算绝对值
    • sum:求和
    • round:向上取整(四舍五入)
    • max:求最大值
    • min:求最小值
>>> pow(2, 4), 2 ** 4, 2.0 ** 4.0
(16, 16, 16.0)

>>> abs(-42.0), sum((1, 2, 3, 4))
(42.0, 10)

>>> min((1, 2, 3, 4)), max((1, 2, 3, 4))
(1, 4)

>>> round(2.56), round(2.46), round(2.567, 2)  # round和floor还可以指定小数的舍入位数
(3, 2, 2.57)
>>> '%.1f' % 2.567, '{0:.2f}'.format(2.567)  # 字符串格式化也可使小数按位舍入
('2.6', '2.57')

内置函数位于一个隐藏的命名空间内,python会自动在这个命名空间中搜索名字,这个命名空间对应builtins的标准库模块。

  • 内置模块math:
>>> import math
>>> math.pi, math.e
(3.141592653589793, 2.718281828459045)

>>> math.sin(math.pi / 3), math.cos(math.pi / 3), math.tan(math.pi / 3)
(0.8660254037844386, 0.5000000000000001, 1.7320508075688767)

>>> math.sqrt(2)
1.4142135623730951
  • 内置模块random

random提供了一系列的随机处理函数工具:

random.random函数:返回一个随机的0到1之间的浮点数

random.randint函数:返回一个两个数字之间的随机整数

random.choice函数:从一个序列中随机挑选一项

random.shuffle函数:随机打乱列表中的元素

>>> import random
>>> random.random()
0.6190454094520157
>>> random.random()
0.88053113013268

>>> random.randint(1, 10)
9
>>> random.randint(1, 10)
1

>>> random.choice(['a', 'b', 'c'])
'c'
>>> random.choice(['a', 'b', 'c'])
'b'

>>> abc = [ 'a', 'b', 'c']
>>> random.shuffle(abc)
>>> abc
['b', 'c', 'a']
>>> random.shuffle(abc)
>>> abc
['a', 'b', 'c']

2. 小数类型

python中还有一种小数对象(Decimal),小数对象位于decimal模块中,创建时需要调用decimal模块的Decimal构造函数来创建小数,而不是通过字面量表达式来创建。

小数很像浮点数,但是小数有固定的位数和小数点,即小数是精度固定的浮点数

小数基础知识

浮点数的运算缺乏精确性:

>>> 0.1 + 0.1 + 0.1 - 0.3
5.551115123125783e-17

使用小数对象将使结果更加准确:

>>> from decimal import Decimal
>>> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3')
Decimal('0.0')

在表达式中使用不同精度的小数时,python会自动转换为最高的小数精度:

>>> Decimal('0.1') + Decimal('0.10') + Decimal('0.10') - Decimal('0.3')
Decimal('0.00')

也可以使用浮点数来创建小数对象,这一转换是精确的,但是有时候结果会产生庞大的小数位数:

Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
Decimal('2.775557561565156540423631668E-17')

设置全局小数精度

decimal模块还可设置全局的小数数值精度和舍入模式等:

>>> import decimal
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal('0.1428571428571428571428571429')  # 小数的默认有效精度是28

# 设置小数精度
>>> decimal.getcontext().prec = 4  
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal('0.1429')

# 设置舍入模式,decimal.ROUND_HALF_UP表示向上舍入,decimal.ROUND_HALF_DOWN表示向下舍入
>>> decimal.getcontext().rounding = decimal.ROUND_HALF_UP
>>> Decimal('3') / Decimal('2.2')
Decimal('1.364')

小数上下文管理器

可以使用with上下文管理语句创建小数的上下文管理器,这样在with语句中设置的精度将会在退出with语句后重置:

# 创建上下文管理器
>>> with decimal.localcontext() as ctx:
        ctx.prec = 2
        decimal.Decimal(1) / decimal.Decimal(7)

    
Decimal('0.14')
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal('0.1429')

3. 分数类型

python中还有分数类型(Fraction),它实现了一个有理数对象,它显式地保留了一个分子和分母,从而避免了浮点数运算的不精确性。

分数基础知识

与小数类型类似,分数类型位于fractions模块中,需要导入fractions模块的构造函数Fraction并传递一个分子和分母来产生一个分数:

>>> from fractions import Fraction
>>> Fraction(1, 3)
Fraction(1, 3)
>>> Fraction(4, 6)
Fraction(2, 3)
>>> x = Fraction(1, 3)
>>> y = Fraction(4, 6)  # 分数会自动约分
>>> x
Fraction(1, 3)
>>> y
Fraction(2, 3)
>>> print(y)
2/3

分数对象也可以通过浮点数字符串来创建:

>>> Fraction('.25')
Fraction(1, 4)

>>> Fraction('1.25')
Fraction(5, 4)

一旦创建了分数对象,就可以用于平常的数学表达式中:

>>> x + y
Fraction(1, 1)
>>> x - y
Fraction(-1, 3)
>>> x * y
Fraction(2, 9)

分数转换和混用类型

  • 浮点数转分数:浮点数对象有一个as_integer_ratio()方法,可以产生分子分母比;另外,分数有一个from_float方法,可以接受一个浮点数返回对应的分数
>>> f = 0.25
>>> z = Fraction(*f.as_integer_ratio())  # *号是一种特殊的语法,它可以把一个元组展开成单独的参数
>>> z
Fraction(1, 4)
>>> Fraction.from_float(0.75)
Fraction(3, 4)
  • 分数转浮点数:float函数可以直接将Fraction对象转换成浮点数
>>> z
Fraction(1, 4)
>>> float(z)
0.25

表达式中允许分数和浮点数混合使用:

>>> x
Fraction(1, 3)
>>> x + 2               # Fraction + int -> Fraction
Fraction(7, 3)
>>> x + 2.0             # Fraction + float -> float
2.3333333333333335
>>> x + (1./3)
0.6666666666666666
>>> x + (4./3)
1.6666666666666665
>>> x + Fraction(4, 3)  # Fraction + Fraction -> Fraction
Fraction(5, 3)

尽管可以把浮点数转换成分数,但是某种情况下,这么做会有不可避免的精度损失,因为这个数字在其最初的浮点数形式下就是不精确的,必要时,可以通过限制分母的最大值来简化这样的结果。

>>> (4 / 3).as_integer_ratio()
(6004799503160661, 4503599627370496)

>>> x
Fraction(1, 3)
>>> a = x + Fraction(*(4 / 3).as_integer_ratio())
>>> a
Fraction(22517998136852479, 13510798882111488)
>>> 22517998136852479 / 13510798882111488
1.6666666666666665
>>> a.limit_denominator(10)
Fraction(5, 3)

标签:Python,Decimal,random,数值,浮点数,Fraction,类型,decimal,小数
From: https://www.cnblogs.com/N1rv2na/p/18051536

相关文章

  • python hashlib模块详解
    hashlib是python自带的加密模块,提供了一些基础常用的加密方式,如:md5(),sha1(),sha224(),sha256(),sha384(),sha512(),blake2b(),blake2s() Hash对象提供了4个方法: --update(data):更新hash对象的字节数据,data是需要加密的文本内容,需要转为bytes类型,如果”abc123”.en......
  • 详解Python中sys模块的功能与应用
    本文分享自华为云社区《深入Python:sys模块的功能与应用详解》,作者:柠檬味拥抱。在Python的标准库中,sys 模块是一个常用而强大的工具,它提供了与Python解释器交互的函数和变量。本文将介绍sys模块的一些常用函数和方法,并通过实际的代码实例来解析它们的用法。1.sys.argv-命令......
  • Python实现snap:对齐多张遥感影像的空间范围
      本文介绍基于Python中ArcPy模块,实现基于栅格图像批量裁剪栅格图像,同时对齐各个栅格图像的空间范围,统一其各自行数与列数的方法。  首先明确一下我们的需求。现有某一地区的多张栅格遥感影像,其虽然都大致对应着同样的地物范围,但不同栅格影像之间的空间范围、行数与列数、像......
  • python之为函数执行设置超时时间(允许函数执行的最大时间)
    1、背景    通常我们在自定义一个函数后,会调用这个函数来完成我们想要的功能。  就拿爬虫来举例,发送请求后服务器会在指定时间内响应(通常这个时间很短),但是有可能服务器没有返回任何数据。  无论是服务器已经识别爬虫不予返回数据亦或者是服务器繁忙等其他原因,......
  • python基础面试题
    1.断言是什么?assert(断言)用于判断一个表达式,在表达式条件为false的时候会抛出异常AssertionError,ture时断言通过1.1基本语法是:<assert要判断的表达式>1.2断言方法及其用法示例:assertEqual(a,b):断言a和b相等。self.assertEqual(2+2,4)assertNotEqual(a,b):断......
  • 9_dynamic动态类型与object类型的区别
    C#中dynamic动态类型与object类型的区别1.object类型object类型是.NET中System.Object类的别名。在C#中,所有类型(预定义、用户定义、引用类型、值类型)都直接或间接继承自Object。因此,我们可以将任何类型的值用object对象来接收。2.dynamic动态类型动态......
  • 8_C#如何判断变量类型
    C#中判断变量类型的两种方法1.GetType()方法GetType()方法用于获取当前实例的准确运行时类型。该方法返回一个Type对象,该对象包含有关该类型的信息,例如类型名称、成员、属性等。示例:publicclassPerson{publicstringName{get;set;}}publicclas......
  • python 视图渲染方式
    1 第二种和第三种都需要改配置文件(需要重启服务)   2  3  ......
  • python接口自动化系列(14):一键执行生成并打开报告
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074需求在前面的篇幅中,查看测试报告,我们要先运行自动化框架(执行pythonmain.py命令)生成result,然后再生成allure-report,最后再打开报告,这样稍显麻烦。有测试小伙伴就问,能不能一键执行生成并打开报告呢?当然可......
  • 【python接口自动化系列】python + pytest + requests + allure + jsonpath + pyyaml,
     前置基础:python虚拟环境的创建、操作、迁移等python操作yamlpython操作mysqlpytest简易教程 配套练习环境(含相关接口):https://www.cnblogs.com/uncleyong/p/17165143.html 如果文章不能访问,请联系处理,wx:ren168632201 python接口自动化系列(01):自动化测试框......