社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
python中小数都是以二进制形式存储的,但是二进制可能无法精确的表示十进制数,所以有些数字只能无限接近的存储。
由于python二进制的存储形式以及存储误差的存在,所以在四舍五入的时候会出现一些问题。
round函数可以保留n位小数,首先不建议使用, 比如
一个四舍五入了一个没有,因为2.235在python内部存的是2.23499…的形式,四舍五入的时候末尾舍弃了,而2.345在python内部存储的是2.2345000…的形式。
给定一个float类型的数我们无法知道其内部存储的形式,所以round用起来风险比较大,如果非要用的话,可以在target number上加上一个比长度略长的小数
如果非要用round进行四舍五入,可以用如下的形式
a = 2.235
print(round(a*100)/100.0)
== > 2.24
这也是不准的,但是好像用的比较多
四舍五入的准确的形式
注意Decimal内传入的是string的形式
a = Decimal(str(a)).quantize(Decimal("0.00"))
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!