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
>>> c
5.300000000000001
对于一般浮点运算出现误差是因为底层CPU的浮点运算单元和IEEE 754浮点算术标准的一种特性。由于python的浮点数类型保存的数据采用的是原始表示形式,所以如果用到float实例就无法避免这些误差,如果,那么就要使用decimal模块了
在定义的时候就要使用
decimal模块的主要功能是允许控制计算机过程的各个方面,这包括数字的位数和四舍五入。要做到这些就需要创建一个本地的上下文环境然后修改设定:
from decimal import localcontext
a= Decimal("1.3")
b= Decimal("1.7")
print(a/b)
#0.7647058....
with localcontext() as ctx:
ctx.prec=3
print(a/b)
#0.765
with localcontext() as ctx:
ctx.prec=50
print(a/b)
#0.7647058....
其实对于精度的要求主要在于你所处的领域,一般而言,这些细小的误差都是可以接受的,但是在例如金融领域内就不容许任何微小的误差存在,所以decimal模块只是作为一种规避错误的方法,并不是必须。
3. 数值的格式化输出
如果只是对一个单独的数值做格式化输出的话我们使用内建的format()函数即可
x=1234.56789
##Two decimal places of accuracy
format(x,'0.2f')
##Right justified in 10 chars,one-digit accuracy
format(x,'>10.1f')
##Left justified
format(x,'<10.1f')
##Centered
format(x,'^10.1f')
##Inclusion of thousands separator
format(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)