ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

关于python3四舍五入的问题

2020-08-23 11:34:45  阅读:325  来源: 互联网

标签:四舍五入 Decimal rd 关于 HALF input ROUND python3


最近在做面试题,如下: 依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩。

输入描述:

学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。

输出描述:

学号,3科成绩,输出格式详见输出样例。
示例1

输入

17140216;80.845,90.55,100.00

输出

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)))

标签:四舍五入,Decimal,rd,关于,HALF,input,ROUND,python3
来源: https://www.cnblogs.com/xiaogangblog/p/13548651.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有