流畅的python和cookbook学习笔记(四)

时间:2021-08-19 07:47:19

1.数字的四舍五入

  对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可。

  round 函数返回离它最近的偶数。也就是说,对 1.5 或者 2.5 的舍入运算都会得到 2。

>>> round(2.5)
2
>>> round(1.5)
2

  round()的参数ndigits可以是负数,取整到十位,百位,千位, 效果如下:

>>> a = 13123213
>>> round(a, -1)
13123210
>>> round(a, -2)
13123200
>>> round(a, -3)
13123000

  不要将舍入和格式化输出搞混淆了。如果你的目的只是简单的输出一定宽度的数, 不需要使用 round() 函数。只需要在格式化的时候指定精度即可。

>>> x = 1.231231241
>>> format(x, '0.4f')
'1.2312'
>>> 'value is {:0.3f}'.format(x)
'value is 1.231'

2.精确的小数计算

  浮点数无法精确的表达出所有的十进制小数位。

>>> a = 4.2
>>> b = 2.1
>>> a + b
6.300000000000001
>>> (a + b) == 6.3
False

  可以使用decimal模块来提高精确值,但是要牺牲一些性能。

>>> from decimal import Decimal
>>> a = Decimal('4.2')
>>> b = Decimal('2.1')
>>> a + b
Decimal(
'6.3')
>>> print(a + b)
6.3
>>> (a + b) == Decimal('6.3')
True

  控制位数和四舍五入。

>>> from decimal import localcontext
>>> a = Decimal('1.4')
>>> b = Decimal('1.9')
>>> print(a/b)
0.7368421052631578947368421053
>>> with localcontext() as num:
... num.prec
= 3
...
print(a/b)
...
0.737
>>> with localcontext() as num:
... num.prec
= 50
...
print(a/b)
...
0.73684210526315789473684210526315789473684210526316

3.格式化数值

  使用内建函数format(),可以自定义保留多少位,居中等操作。想采用科学计算法,把 f 改为 e 或 E 即可。

>>> x = 1234.56789
>>> format(x, '0.2f') # 保留两位小数
'1234.57'
>>> format(x, '>10.1f') #左边留白
' 1234.6'
>>> format(x, '<10.1f') #右边留白
'1234.6 '
>>> format(x, '^10.1f') # 居中
' 1234.6 '
>>> format(x, ',') # 显示千位
'1,234.56789'
>>> format(x, '0.1f') # 保留一位小数
'1234.6'