Python number dig1

来源:互联网 发布:hp g3110扫描仪软件 编辑:程序博客网 时间:2024/05/22 12:45

1. 对数值进行取整

round(value,ndigits)
ndigits代表的是你要保留的小数的位数
当某个数值恰好等于两个数值的一半时,取整操作会取值到离该值最近的那个整数上,如1.5和2.5都会取到2(Python3版本)
这里写图片描述

当传递给round的ndigits是负数的时候,取整会对应到-1十位、-2百位、-3千位…
这里写图片描述
取整和格式化不能混为一谈

2. 执行精确的小数计算

一般不需要通过浮点数取整来修正精度上的问题,如果说避免误差的行为非常的重要,那么可以使用decimal模块

>>> a=2.1>>> b=3.2>>> c=a+b>>> c5.300000000000001

对于一般浮点运算出现误差是因为底层CPU的浮点运算单元和IEEE 754浮点算术标准的一种特性。由于python的浮点数类型保存的数据采用的是原始表示形式,所以如果用到float实例就无法避免这些误差,如果,那么就要使用decimal模块了
在定义的时候就要使用
这里写图片描述
decimal模块的主要功能是允许控制计算机过程的各个方面,这包括数字的位数和四舍五入。要做到这些就需要创建一个本地的上下文环境然后修改设定:

from decimal import localcontexta= Decimal("1.3")b= Decimal("1.7")print(a/b)#0.7647058....with localcontext() as ctx:ctx.prec=3print(a/b)#0.765with localcontext() as ctx:ctx.prec=50print(a/b)#0.7647058....

其实对于精度的要求主要在于你所处的领域,一般而言,这些细小的误差都是可以接受的,但是在例如金融领域内就不容许任何微小的误差存在,所以decimal模块只是作为一种规避错误的方法,并不是必须。

3. 数值的格式化输出

如果只是对一个单独的数值做格式化输出的话我们使用内建的format()函数即可

x=1234.56789##Two decimal places of accuracyformat(x,'0.2f')##Right justified in 10 chars,one-digit accuracyformat(x,'>10.1f')##Left justifiedformat(x,'<10.1f')##Centeredformat(x,'^10.1f')##Inclusion of thousands separatorformat(x,',')format(x,'0,.1f')

如果想要使用科学计数法只需要把f改为e或者E即可:

format(x,'e')format(x,'0.2E')

在很多的Python代码中,常用%操作符来对数值做格式化处理

'%0.2f' % x'%10.1f' % x'%-10.1f' % x

4. 对二进制、八进制、十六进制的数值做转换或者输出

要将一个整数转换为二进制、八进制或者十六进制的文本字符串形式,只要分别使用内建的bin(),oct(),hex()函数即可
如果不希望出现’0b’,’0o’,’0x’这样的前缀,可以使用format()函数即可

format(x,'b')format(x,'o')format(x,'x')

要将字符串形式的整数转换为不同的进制,只需要使用int()函数再配合具体的进制即可
注意:在Python中处理八进制的语法和操作与其他编程语言稍有不同,例如

>>>mport os>>>os.chmod('halo.py',0755)  File "<stdin>", line 1     os.chmod('halo.py',0755)SyntaxError :invalid token请确保在八进制数前添加0o前缀:os.chmod('halo.py',0o755)