python中的小数精度及浮点数计数原理

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模块里的方法啥的,不是常用的就不介绍了

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值