自学Python 44 数字处理函数(二)

Python 数字处理函数(二)



   本篇在Python 数字处理函数(一)的基础上,继续讲解 Python数字处理函数的知识。


二、使用decimal模块实现精确运算

  在 Python程序中,模块decimal的功能是实现定点数和浮点数的数学运算。decimal实例可以准确地表示任何数字,对其上取整或下取整,还可以对有效数字个数加以限制。当在程序中需要对小数进行精确计算,不希望因为浮点数天生存在的误差带来影响时,decimal模块便是开发者的最佳选择。例如在下面的实例中,演示了分别实现误差运算和精确运算的过程:

a = 4.2
b = 2.1
print(a + b)
print((a + b) == 6.3)
from decimal import Decimal
a = Decimal ('4.2')
b = Decimal ('2.1')
print(a + b)
print (Decimal('6.3'))
print(a + b)
print((a + b) == Decimal ('6.3'))
from decimal import localcontext
a = Decimal(1.3)
b = Decimal('1.7')
print (a / b)
with localcontext() as ctx:
    ctx.prec = 3        #设置3位精度
    print(a / b)
with localcontext() as ctx:
    ctx.prec = 50       #设置50位精
    print(a / b)

  前两行展示浮点数是一个尽人皆知的问题:无法精确表达出所有十进制小数位。从原理上讲,这些误差是底层CPU的浮点运算单元和IEEE754浮点数算术标准的一种“特性”。因为Python使用原始表示形式保存浮点数类型保存数据,所以如果在编写代码时用到float实例,那么就无法避免类似的误差。
  5~11行使用decimal模块解决浮点数误差,将数字以字符串的形式进行指定。Decimal对象能以任何期望的方式来工作,能够支持所有常见的数学操作。如果要将它们打印出来或在字符串格式化函数中使用,看起来就和普通的数字一样。
  12行之后的内容使用decimal模块设置运算数字的小数位数,在实现时需要创建一个本地的上下文环境,然后修改其设定。执行后会输出:
在这里插入图片描述

三、处理二进制、八进制和十六进制数据

  在Python程序中,当需要对以二进制、八进制或十六进制表示的数值进行转换或输出操作时,通常可以使用内置函数 bin()、oct()和 hex()来实现,这三个函数可以将一个整数转换为二进制、八进制或十六进制的文本字符串形式。如果不想在程序中出现0b、0o或者ox之类的进制前缀符,可以使用format()函数来进行处理。如果需要将字符串形式的整数转换为不同的进制,可以使用函数int()来实现。
  例如在下面的实例文件中,演示了将一个整数转换为二进制、八进制或十六进制的过程:

x = 123
print (bin(x))
print (oct(x))
rint(hex(x))
print(format(x, 'b'))
print (format(x, 'o'))
print(format(x, 'x'))
x = -123
print (format(x, 'b'))
print(format(x, 'x'))
x = -123
print (format (2**32 + x,'b'))
print (format(2**32 + x, 'x'))
print(int('4d2', 16))
print (int('10011010010', 2))

  第1~4行使用内置函数bin()、 oct() 和hex()实现进制转换。
  第5~7行使用函数format()取消进制的前缀。
  第8~10行转换处理负整数。
  第11~13行添加最大值来设置比特位的长度,这样可以生成个无符号的数值。
  最后两行使用函数int()设置进制,将字符串形式的整数转换为不同的进制。
  执行后会输出:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值