惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
N
Netflix TechBlog - Medium
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
月光博客
月光博客
博客园 - Franky
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
雷峰网
雷峰网
小众软件
小众软件
H
Hackread – Cybersecurity News, Data Breaches, AI and More

老董笔记

尚硅谷机构在哪?尚硅谷培训怎么样?靠谱吗-互联网IT百科 韩顺平介绍,传智讲师,开办泰牛,入尚硅谷等一系列-互联网IT百科 pandas多重索引标准样式(写入excel有空行)-互联网IT百科 cannot join with no overlapping index names-互联网IT百科 pandas多列变多行(即宽表变长表)melt和stack函数-互联网IT百科 pandas多行转多列(长表变宽表)pivot和unstack-互联网IT百科 Index contains duplicate entries, cannot reshape完美解决-互联网IT百科 single positional indexer is out-of-bounds-互联网IT百科 Can only compare identically-labeled Series objects-互联网IT百科 pandas transform用法详解(多个案例)-互联网IT百科 pandas的groupby使用apply分组排序-互联网IT百科 index 0 is out of bounds for axis 0 with size 0-互联网IT百科 pandas分组过滤filter函数-互联网IT百科 联想Win10系统如何禁用触摸屏关闭触摸-互联网IT百科 groupby分组计算transform转换返回相同长度序列-互联网IT百科 brooks seo教程python教程,brooks seo教程网盘,布鲁seo资源-互联网IT百科 电脑右键文件夹一直转圈电卡死怎么回事-互联网IT百科 施琪嘉的心理成长课(荐)-互联网IT百科 百度SEO公司_SEO推广公司哪家好_SEO外包服务如何选-老董笔记 groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数-互联网IT百科 pandas的groupby单列多列分组聚合运算-互联网IT百科 DataFrameGroupBy对象及分组个数、分组大小、组名索引、组数据详解-互联网IT百科 pandas中groupby之Grouper and axis must be same length-互联网IT百科 pandas中groupby的分组原理-互联网IT百科 pandas的groupby的使用详解大全-互联网IT百科 openpyxl单元格自动换行强制换行Alignment(wrapText=True)-互联网IT百科 python教程全套(可就业)-互联网IT百科 联想win10系统CPU显示100%,电脑呼呼响怎么回事-互联网IT百科 如何自制CPU,CPU原理是怎么样的?-互联网IT百科 多款视频制作工具(免费)分享及素材推荐-互联网IT百科
python四舍五入精确实现-互联网IT百科
2022-04-05 · via 老董笔记

  python实现四舍五入似乎不是很容易。最开始想到的是round函数,但是结果并非如你所愿。实测代码如下:

# -*- coding:UTF-8 -*-

print(round(0.234,2))
print(round(0.235,2))
print(round(0.5))
0.23
0.23
0

  为何会出现这种现象?鄙人查了一些资料但是还不能完全解释,只能说这个涉及数据存储和运算的问题,涉及的非常底层。那该如何实现四舍五入呢?可以借助decimal模块实现。

# -*- coding:UTF-8 -*-

from decimal import Decimal
from decimal import ROUND_HALF_UP

res1 = Decimal('0.234').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
res2 = str(Decimal('0.235').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP))
res3 = str(Decimal('0.5').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP))
print(res1,type(res1),float(res1))
print(res2)
print(res3)

0.23 <class 'decimal.Decimal'> 0.23
0.24
0.50

  上述Decimal('0.00')指保留两位小数,rounding指定进位方式,Decimal的返回值是一个decimal.Decimal对象。ROUND_HALF_UP表示Round to nearest with ties going away from zero的进位方式,即四舍五入。

  如果你想给Decimal传入浮点数,代码不会报错,但是要避免这么做,因为结果有时候达不到四舍五入的预期。

# -*- coding:UTF-8 -*-

from decimal import Decimal
from decimal import ROUND_HALF_UP

res1 = Decimal(0.234).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
res2 = str(Decimal(0.235).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP))
res3 = str(Decimal(0.5).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP))
print(res1,type(res1),float(res1))
print(res2)
print(res3)

0.23 <class 'decimal.Decimal'> 0.23
0.23
0.50

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会