python3.52四舍五入_关于python3四舍五入的问题

The each subject score of No. 17140216 is 80.85, 90.55, 100.00.

选择用python做的话:很容易就写出来如下代码:

s_input = input()

a,b = s_input.split(";")

s1,s2,s3 = b.split(",")

print("The each subject score of No. %s is %.2f, %.2f, %.2f."%(a,round(float(s1),2),round(float(s2),2),round(float(s3),2)))

然后发现与题目要求的输出结果不一致,80.845四舍五入得到的是80.84

那如何能得到正确的四舍五入结果呢?

百度搜索之后,发现网上有说,写个函数,乘以一百,四舍五入之后,再除以一百,就能得到正确的四舍五入结果,尝试了一下,发现这个是坑,80.845四舍五入得到的是80.84,还是没办法返回80.85

继续百度,发现可以用 decimal 模块,设置rounding参数,指定进位方式为ROUND_HALF_EVEN 就可以得到正确的结果

于是自己写一个四舍五入的函数:

from decimal import Decimal, ROUND_HALF_UP

def rdec(x):

return Decimal(x).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)

这个函数的传参,建议用字符串,如果是浮点数的话,浮点值在计算机里面不能被精确存储,那么它会先被转换为一个不精确的二进制值,然后再把这个不精确的二进制值转换为等效的十进制值,这样得到的四舍五入的值肯定是有偏差的

然后这个面试题的答案如下:

from decimal import Decimal, ROUND_HALF_UP

def rd(x):

return Decimal(x).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)

s_input = input()

a,b = s_input.split(";")

s1,s2,s3 = b.split(",")

print("The each subject score of No. %s is %s, %s, %s."%(a,rd(s1),rd(s2),rd(s3)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值