在Python里想要四舍五入有多麻烦?

article/2025/6/8 19:54:45

大家好,欢迎来到 Crossin的编程教室~

四舍五入」是小学就学过的数学知识,也是日常计算中经常会用到的处理方法。

然而让人没想到的是,一个简单的四舍五入操作,在Python里居然这么难搞,网上还一堆错误的教程。

来看这个例子,有一个变量a为1.135,现在希望把它保留2位小数,要怎么做?

网上搜索一下,找到两种方法:

第1种,round函数。第一个参数是原数字,第二个参数是要保留的小数位数

结果 1.14,没有问题。

第2种,通过格式说明符.f对浮点数进行字符串格式化,f前加上要保留的小数位数。

这种写法在 %格式化、format方法和f-string 上均适用。

果 1.14,也没有问题。

所以看来,以上两种方法都可以实现四舍五入地保留小数位数……

but,真的是这样吗?

显然事情没这么简单。如果把a的值改成1.125,再跑一下之前的代码,就发现两种方法都不对了。

别小看这么一点误差,我曾经在做助教时,就因为类似的原因,导致一位原本算好被60分放过的同学挂了科。

有些不靠谱的半瓶水教程会跟你说,这是因为Python用了种叫做「四舍六入五成双」的保留机制:5前面的数字是奇数就进位,是偶数就保持不变,所以1.135会得到1.14,而1.125就是1.12。

还有的教程告诉你有种方法可以实现四舍五入:就是把要保留N位的小数,乘以10的N次方,加上0.5后取整,再除以10的N次方

结果确实是 1.13。

但你以为这样就可以了吗?

如果再把a改成1.035。结果既没有什么所谓的奇数进位,也没能通过先乘再除的方法实现四舍五入。

把1.005,1.015,1.025,一直到1.995,用前面提到过的3种方法保留2位小数的结果输出出来就会发现。round和字符串格式化得到的保留结果是一样的,且基本没有规律可言。

而先乘后除法虽然在大部分情况下是符合四舍五入的,但仍然有一些例外的情况。

导致这种现象的原因,和之前讲解过的 0.1 + 0.2 != 0.3一样,都是因为浮点数的精度造成的。

让这些小数输出更多位数,就会看到,很多值虽然结尾是5,但在计算机中以二进制存储的实际值其实不到5。那么按照四舍五入来说,当然是要被舍去了。

真正可以做到对小数保留位数进行精确控制的方法是使用 Python 内置的 decimal 模块,它用于高精度的十进制算术运算。

用 round 函数对于 Decimal 类型对象进行保留,才是真正的四舍六入五成双。

这种机制又被称作「银行家舍入」,它其实比四舍五入更合理。因为5是两个数的中间值,全都进位会让数据在整体分布上偏大,而银行家舍入规则可以让累积误差趋向于0。

如果你就是想要按照四舍五入来保留,也可以,通过将 Context 里的 rounding 属性设置为 ROUND_HALF_UP 就可以

另一种写法是通过 Decimal 的 quantize 方法,指定保留位数和舍入规则,效果是一样的。

这样,就能完美地按四舍五入保留小数了。

不过这里还有一个小小的坑,就是一定要通过字符串去创建 Decimal 对象,否则实际值仍然是带有误差的,从而导致四舍五入失效。

好吧,没想到一个简单的四舍五入操作,竟然还这么复杂,你学会了吗?

作者:Crossin的编程教室

Crossin的新书《码上行动:用ChatGPT学会Python编程》已经上市了。本书以ChatGPT为辅助,系统全面地讲解了如何掌握Python编程,适合Python零基础入门的读者学习。【点此查看详细介绍】

购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。

crossin123 ,加入编程教室共同学习~

感谢转发点赞的各位~


http://www.hkcw.cn/article/AydpOvNBTS.shtml

相关文章

辅导员说丨法学专业学生为何要特别注重专业实习?

一、引言 作为法学专业学生,专业实习是学生职业发展中至关重要的一环。通过与实习单位的合作,学生能够将理论知识转化为实际操作,提升实践能力,并为将来的就业打下坚实的基础。本文从高校辅导员的角度出发,紧密结合辽宁师范大学法学院的实际情况,探讨了法学专业学生为何要…

如此对你的男人,他在很用心爱你,会陪你到终老

文/夏莫 01、卷首语 结婚的时候,不管多炽热的誓言,落到了烟火日常里,也会变得灰扑扑的。 更何况大部分的男人,都是向外求成,会把自己的重心和注意力,放在事业或者人际交往中。 所以,他花在家里的心思,留给女人的关心,都会大大减少。这也是女人在结婚之后,都倍感失落的…

人文青岛|古力,城市的印章——走访老街,再现青岛下水道的起点和历程

人文青岛|古力,城市的印章——走访老街,再现青岛下水道的起点和历程黄县路上的百年古力 秦岭 摄 □文/半岛全媒体首席记者 张文艳 行走在城市街巷,脚下踩着的,有路石,也有古力。古力也就是窨井盖,在青岛,它因为雨季下水道的优秀表现而闻名遐迩。青岛独立摄影师秦岭先生,…

张翰剧中的“咸猪手”引发争议

近期,张翰因主演电视剧《东八区的先生们》备受关注,然而引起争议的并非剧集的高收视,而是他在剧中对女主角王晓晨的一些不当举动。网友发现,张翰在剧中对王晓晨的摸胸、扯内衣带等行为引发了网友们的愤怒,有人质疑他是否有借戏揩油的嫌疑。 在影视作品中,男女主角的亲密戏…

《我们十七岁》把几个咖“虐”得很惨,这就对了(组图)

《我们十七岁》海报 近期扎堆的真人秀中,《我们十七岁》是唯一一档我从头追到尾的节目。 追的理由很简单:1、这档节目从定艺人到拍摄再到成片,我都有意无意地看到了过程。初看时觉得不咋地,没啥期待。等到播出后再看,超出预期。2、节目内容确实很搞笑,解压。 节目已播到第…

1.5折 好友联机8人野外探险求生 《The Wild Eight》

1.5折好友联机8人野外探险求生《TheWild Eight》 《荒野八人组(TheWildEight)》是一款极具挑战性的生存冒险游戏,游戏将背景设置在寒冷的阿拉斯加森林,逼真的环境和紧张的氛围让玩家全程紧绷神经。通过应对恶劣天气、资源匮乏和野生动物威胁,独特的合作与独立求生机制为玩家…

部编版六年级语文下册课堂笔记,学习好帮手!

点上方 ↑“ 中 小学生阅读” 关注更多资讯 ! ●阅读应当成为吸引学生爱好的最重要的发源地。我的教育信念的真理之一,便是无比相信书的教育力量。——苏霍姆林斯基 01 记笔记的目的 1. 记忆 记笔记最基本的作用,就是再次加深对内容的记忆。古人所说“手抄一遍,胜读十遍”不…

艺海拾趣 | 感受大自然的美——贝多芬《黎明奏鸣曲》

《黎明奏鸣曲》是贝多芬奏鸣曲中非常经典的一首。1796年,贝多芬的身体健康出了问题,听力也随之减弱,身心遭受了很大的压力。然而,贝多芬不屈服命运,在极其艰苦的情况下,仍然坚持创作。他仿佛忘记了自己已经失聪,他的作品《普罗米修斯》舞剧的配乐于1801年获得成果。之后…

30首爱国歌曲,总有一首让你泪流满面

我们伟大的祖国 迎来她73岁的华诞 在这欢乐时刻 借这一首首脍炙人口的颂歌 寄托炎黄子孙的无限深情 表达华夏儿女对祖国的美好祝愿 让我们一起重温这些熟悉的旋律 共迎国庆祝福祖国!用钟声记录历史,用掌声激励现在, 用歌声憧憬未来,用笑声迎接晨曦, 用琴声送走夕阳,用锤声…

网盘大战:免费模式用户量越大亏损越多,腾讯微云先熬不住了!

12月15日晚间,腾讯微云突然发布调整服务公告,称普通用户的免费存储容量缩小为10G,原存储文件已超过10G的普通用户,仍然可以下载和访问文件,但上传新文件将受到限制。 从公告来看,此次调整是为了让更多的人能够共享稳定、长久的云存储资源,实现平台的可持续发展。 在此次…

原创《侠盗猎车手4-夜生活之曲》全任务100%指南

《夜生活之曲》(即The Ballad of Gay Tony)是GTA4的一个DLC,讲述了4代三主角之一的路易斯的故事。游戏系统与本体相比有了很大的提升,其中最明显的就是游戏剧情任务有了可完成目标,让游戏增加了不少挑战性。 当你完成全任务100%后即可解锁成就关于GTA4其他成就可以查看我的…

原创63岁恬妞罕露面,女儿短发穿大裤衩像男孩,喜欢同性妈妈不反对

3月28日,有网友在社交平台发布了一张女星恬妞63岁生日宴的照片,林峰、白梓轩和恬妞的女儿朱宇丰一起为她庆生。照片中,恬妞身材有些发福,穿着休闲服饰,扎着丸子头,开心地对着镜头比耶,颇有岁月静好的感觉。女儿则留着短发,穿宽大T恤和大裤衩。相比于罕见露面晒照的恬妞…

22张图 告诉你不一样的南极

你心目的南极洲是什么样的? 可能大多数人脑海里涌现的是: 万里冰封、白雪茫茫、冰川耸立....总之, 就是冰呀、雪呀、企鹅呀...这些~ 其实南极洲除了冰雪、企鹅 还有很多你未曾见过的东西。 下面是某外网收集一些南极的景观, 有风景、野生动物、科考建筑、 工作影像..... 一…

【食在山海间】“国鱼”大黄鱼的自述:“重生”“出圈”,到“开游”世界

编者按:悠悠万事,吃饭为大。在福建工作期间,习近平同志就提出大食物观重要理念,立足资源优势,因地制宜念好“山海经”。“八山一水一分田”的福建,逼出了“生存技能”,解放思路,耕山牧海,向森林、向江河湖海、向设施农业、向丰富的生物资源要食物,从依山而居开发“森…

原创全球6大最美女星,中国仅1上榜,这位女星并不是王祖贤

娱乐圈从来不缺美女与帅哥,非要排出个名次,确实不是一件容易的事情。今天就说说全球6大女星,各个美得无与伦比,但中国仅一人上榜,这个人并不是王祖贤。艾希瓦亚雷是一位来自印度的知名女演员,之所以能够进入娱乐圈就是凭借其世界小姐冠军的名号,又在印度凭借作品《善良的…

谁是14亿最强男?董泰山如蛮荒巨兽,张君龙拳头更

九条金腰带拥有者张君龙 谁是14亿中国人里的格斗第一英雄?在小说和评书演义里,瘦小枯干的李元霸也可以力大无穷,打遍天下。但是我们要尊重搏击科学,14亿最强男人只可能出现在重量级拳手里,我国三位重量级拳王最被行家看好,他们分别是张君龙、董泰山、张志磊。 尽管70多公…

杨紫散发紫裙好惊艳,换团队美出新高度,长相思也迎来了好消息!

杨紫是很多人都非常喜欢的国内年轻流行女演员之一。它有很多流行的单品,感觉非常舒适和平易近人。今年暑假期间,由杨紫主演的《长相思》也将与观众见面。(本文为西风影视独家发布,严禁抄袭、洗手!) 杨紫紫的侧翼在此期间,杨紫完成了一部新剧的拍摄,但主要是休息并参加了…

夜读 | 阿联酋双城记:两个阔人斗富的最高境界是什么?

两个阔人斗富的最高境界是什么? 谁能回答这个问题 千万不要说什么 "贫穷限制了我的想象力" 可是,不然呢,还能说什么?等等,《夜读》能给你答案 富得流油地的中东阿拉伯国家阿联酋 有两个家产不相上下 地盘也是数一数二的城市一个我们认识得最早,叫迪拜 展…

念佛的好处,不知道你就亏大了

01 玄奘大师所翻译的《阿弥陀经》就说: 无量寿佛,无量无边,不可思议,功德名号。 这一句南无阿弥陀佛名号有 “无量无边不可思议”的功德,所以,这一句名号就是“无量无边不可思议功德”的名号。 02 念佛的“现当二益”我把它归纳为十五点: 第一,弥陀住顶; 第二,佛光护…

日本网友评选“恶之帝王”前十,弗利萨荣登第一,多弗朗明哥垫底

动漫中,特别是热血的战斗番,通常都有“反派”这个角色。主角的成长需要这些反派的衬托、激发,也需要反派的残酷调动粉丝的情感。有的反派刻画得很深入人心,还很受广大的网友的喜爱。那么,日本网友评选出前十的“恶之帝王”都是谁呢?第一位:弗利萨 弗利萨是《龙珠》中的反…