round()内置方法
输入参数第一位为输入的数值,第二位为小数点后保存位数,不填默认为保留小数点后一位且取整
>>> round(2.5)
3.0
>>> round(-2.5)
-3.0
>>>> round(2.675)
3.0
>>>> round(2.675,2)
2.67
不过round()有个坑
round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数。一般情况是使用四舍五入的规则,但是碰到舍入的后一位为5的情况,如果要取舍的位数前的数是偶数,则直接舍弃,如果奇数会向上取舍。看下面的示例(就是这么神奇):
>>> round(2.555,2)
2.56
>>>> round(2.565,2)
2.56
>>>> round(2.575,2)
2.58
>>>> round(2.585,2)
2.58
使用格式化
print("付款金额为:{:.2f}".format(2.435))
付款金额为:2.44
print("付款金额为:{:.2f}".format(2.434))
付款金额为:2.43
print("付款金额为:{:.2f}".format(2.445))
付款金额为:2.44
print("付款金额为:{:.2f}".format(2.444))
付款金额为:2.44
使用:.2f,来表示小数,其中数字可以改为任意数字,对应保留为相应位数的小数点。同时和round()一般情况是使用四舍五入的规则,但是碰到舍入的后一位为5的情况,如果要取舍的位数前的数是偶数,则直接舍弃,如果奇数会向上取舍
这里还有个小tips如果不加数字前的’.’,那么不管数字是多少所有的都会默认保留小数点后6位
print("付款金额为:{:3f}".format(2.435))
付款金额为:2.435000
高精度使用decimal模块,配合getcontext
#该方法最好用于计算
```python
from decimal import Decimal, getcontext
getcontext().prec = 3
price = Decimal(1.12345)
print(price)
1.1234500000000000596855898038484156131744384765625
weight = Decimal(1.12345)
print(weight)
1.1234500000000000596855898038484156131744384765625
result = Decimal(price * weight)
print("付款金额为:{}".format(result))
付款金额为:1.26
这里简单解释下为什么小数会变成那么大一串数字。
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
getcontext().prec方法控制小数点位置,四舍五入
这里有个坑需要注意的是getcontext().prec对于数值较大的运算,可以设置的适中,如9不然最后出现的值,可能无法正常显示
除法
a = 1
b = 3
print(a / b)
0.3333333333333333
刚刚简单提过,是的,python中的除法是精确运算,结果为float小数,最大精度为python默认位数,小数点后16位
以上就是常用的几种方法,其他其实还有math模块里的方法啥的,不是常用的就不介绍了