关于python浮点数计算错误,强行转整数导致数据出错,导致WA。通过round()进行强转解决问题

a = 0.58
b = a*100
c = int(b) 
#按逻辑来说,c = 58 但是实际是57 原因是b = 57.99999999999999

输出 

原因:

失真原因:float数值二进制运算

​ 计算机是二进制的数据,int类型进制之间的转化起来十分简单与准确,但是float类型数据转化为二进制就比较麻烦。浮点数储存

浮点数在计算机中存储也是以二进制的形式,遵循IEEE二进制算数标

 解决方式:

尽量不要使用int对浮点数据进行强转,通过round()进行强转,

a = 0.58
b = a*100
c = int(b) #按逻辑来说,c = 58 但是实际是57 原因是b = 57.99999999999999
d = int(round(b,2))#解决方法,用round来使其转为整数,当参数(用于小数点后几位)不存在的时候,返回整数

测试

 

危害性:

题目:

题目描述

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。

请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。

输入描述

输入的第一行包含一个整数 n\ (1 \leq n \leq 10^4)n (1≤n≤10 4 ),表示考试人数。

接下来 nn 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

输出描述

输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。

输入输出样例

示例

输入

7 80 92 56 74 88 100 0

输出

71% 43% copy

运行限制 最大运行时间:1s 最大运行内存: 256M

total = 99
pass_student = 0
good_student =0
for a in list:
    if (a >= 60):
        pass_student += 1
    if (a >= 85):
        good_student += 1
pass_rate = round(pass_student/total,2)
good_rate = round(good_student/total,2)
print(pass_rate,pass_rate*100)

#print('{0}%'.format(int(3/6*100)))
print('{}%'.format(int(pass_rate*100)))#导致计算百分比会出错
print('{}%'.format(int(good_rate*100)))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值