老师你好,这边做了下测试,round方法有些结果很奇怪,请问能否解答下,谢谢。

来源:8-1 认识函数

慕圣1107467

2021-02-01

#【问题】:1.555这个赋值给number_2变量,使用round函数保留2位小数,得出结果为1.55,
#     但值为0.555时,使用round函数保留2位小数,得出结果为0.56
#【补充说明】:Python版本为3.8.7 64-bit  
#       系统为Windows 7(64位)
#       电脑只装了1个Python版本 
#       IDE开发工具是VSCode,按照前几节视频一步步来配置的,中途都没有问题
number_1 = 1.4440
number_2 = 1.5550
number_3 = 1.5560
number_4 = 0.5550
number_5 = 1.5550
number_6 = 2.5550

resule_1 = round(number_1,2)
resule_2 = round(number_2,2)
resule_3 = round(number_3,2)
resule_4 = round(number_4,2)
resule_5 = round(number_5,2)
resule_6 = round(number_6,2)

print("【result_1】="+str(resule_1))
print("【result_2】="+str(resule_2))
print("【result_3】="+str(resule_3))
print("【result_4】="+str(resule_4))
print("【result_5】="+str(resule_5))
print("【result_6】="+str(resule_6))

【运行结果】
【result_1】=1.44
【result_2】=1.55
【result_3】=1.56
【result_4】=0.56
【result_5】=1.55
【result_6】=2.56


写回答

2回答

7七月

2021-02-01

有很多种不同的省略模式,有向上,向下,也有四舍五入。每种语言都提供了不同的省略模式。这个可以搜索了解下。

0
1
慕圣1107467
好的,明白了,谢谢老师。
2021-02-02
共1条回复

慕圣1107467

提问者

2021-02-01

已在百度找到原因:实际1.5550


用二进制转化的是有精度损失,部分小数无法完全用二进制表示。

但基于这种情况,在银行或其他场景下计算可能需要解决办法,所以,请问老师有好的解决方案达到真正的4舍5入么??

网上的搜到的是这样的↓,我觉得不太容易理解

from _pydecimal import Decimal, Context, ROUND_HALF_UP

print(Context(prec=3, rounding=ROUND_HALF_UP).create_decimal('1.5550'))



0
1
慕圣1107467
【补充】:1.5550真正值经转化后等于1.5549999999999999378275106209912337362766265869140625 保留两位小数时就得到1.55 #【-----------------换行---------------------】 #【-----------------换行---------------------】 #【-----------------换行---------------------】 import decimal print(decimal.Decimal(1.5550)) # 1.5549999999999999378275106209912337362766265869140625
2021-02-01
共1条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程