python format函数保留两位小数_Python四舍五入与保留小数(精确舍入与保留)

本文详细介绍了Python3中使用decimal模块进行精确的四舍五入操作,包括Decimal方法的使用、舍入模式设置,并对比了非精确的舍入方法如`print("%.xf" % a)`、`format()`和`round()`函数的不足,旨在帮助Python初学者理解精确舍入和保留小数位数的方法。
摘要由CSDN通过智能技术生成

本文深入讲解Python3中 四舍五入、截断保留 与 保留小数位数、取整 ,帮助Python初学者排坑!
总结不易,转载请标明出处:https://blog.csdn.net/weixin_41683971/article/details/105027654

0. 前言(吐槽)

作为一个Python初学者,偶然遇到需要利用Python3进行四舍五入的操作,就想着查一查有没有什么简单快捷的小函数一步到位。这不查不得了,一查就晕倒,网上的帖子和博客漫天飞,闭着眼睛瞎吹的文章一大堆,为了弄懂这一块,费了很多时间和精力。
刚开始很迷,毕竟是个Python小白,咱也不知道人家说的到底对不对,那就多看几个呗,看看咋回事,可谁成想越看越乱。
一开始基本都是“round函数可进行四舍五入运算”,然而我验证了一下发现round压根不行;
又看到有人说用格式控制字符“%.xf”直接就四舍五入到保留位数,emmm就仗着我是小白瞎告诉我呗;
再后来有个稍微好一点的,说用decimal模块的Decimal()+quantize(),还举了俩例子验证了下,emmm还自己把自己给验证错了,还说“原因未知,精度不高,慎用”…
于是我就自己去查了Python3.8.2的官方文档,看了decimal模块和round函数的说明,才恍然大悟。

好了,不多说,上干货!

1. 四舍五入(精确)

1.1 四舍五入并保留x位小数——用decimal模块中的Decimal方法(精度高)

① 数据存储需为字符串型

Decima(a)中的a需要是字符串形式的数字,而不能直接是浮点型数字,因为浮点型数据本身就不是精确的。Why?

假设你输入的是0.1+0.1+0.1,你以为是0.3(是你臆想的十进制运算得到0.3),但在计算机存储中是以二进制浮点数存储的(计算机会自动将你的十进制0.3转化为二进制0.3,但是计算机的二进制存储可不像0.3这么精确),其实它对应的是十进制的0.300000000031或其他,因此并不是精确的。

>>> 0.1 + 0.1 +0.1 == 0.3
False
>>> 0.1 + 0.1 + 0.1
0.30000000000000004

而使用字符串存储输入的数据就可以精确存储输入的数据,即输入是多少输出就是多少。

② 模块及函数引入

导入decimal模块,则调用模块中函数时需用 模块名.函数名(参数) 的形式''

>>> import decimal
>>> a = "1.345"
>>> a_t = Decimal(a).quantize(Decimal("0.01"), rounding = "ROUND_HALF_UP")
>>> print(a_t)
1.35

导入decimal模块中的Decimal函数,则调用时只需用该模块中的 函数名(参数) 的形式

>>> from decimal import Decimal
>>> a = "1.345"
>>> #保留几位小数由像第二个括号中的几位小数决定,即保留两位小数,精确到0.01
>>> #如果想要四舍五入保留整数,那么第二个括号中就应该为"1."
>>> a_t = Decimal(a).quantize(Decimal("0.01"), rounding = "
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值