Python中如何正确输出保留两位小数的百分比格式?
解决Python百分比格式输出的问题
嘿,作为Python初学者遇到这种格式问题太正常啦,我来帮你捋清楚问题出在哪!
核心问题:重复放大了数值
你代码里的问题出在格式化规则的理解上:Python的"{:.2%}"格式说明符会自动帮你完成「乘以100 + 添加百分号」的操作,但你已经手动在计算m_perc和f_perc的时候乘以100了,相当于把数值放大了两次,所以才会出现5000.00%这种奇怪的结果。
举个例子:如果男生有50人,总人数100人,你手动计算后得到50/100*100=50,然后用"{:.2%}"格式化时,Python会把50再乘以100,变成5000,再加上%,就成了5000.00%。
两种解决办法
办法一:去掉手动乘以100的操作(推荐)
直接用原始的小数比例去格式化,让"{:.2%}"帮你完成乘100和加%的步骤:
class_males = float(input('Please enter the number of male students registered:')) class_females = float(input('Please enter the number of female students registered:')) class_total = class_males + class_females # 这里不用转int,保持float更准确 m_perc = class_males / class_total # 直接计算比例,不乘100 f_perc = class_females / class_total male_perc = "{:.2%}".format(m_perc) female_perc = "{:.2%}".format(f_perc) print('Percentage of males registered:', male_perc) print('Percentage of females registered:', female_perc)
办法二:保留手动乘100,改用普通小数格式加%
如果你习惯先把数值转成百分比的数字(比如50代表50%),那可以用"{:.2f}%"来格式化,这样只会保留两位小数,然后手动加上%:
class_males = float(input('Please enter the number of male students registered:')) class_females = float(input('Please enter the number of female students registered:')) class_total = int(class_males) + int(class_females) m_perc = int(class_males)/int(class_total)* 100 f_perc = int(class_females)/int(class_total)* 100 male_perc = "{:.2f}%".format(m_perc) # 这里用.f而不是.% female_perc = "{:.2f}%".format(f_perc) print('Percentage of males registered:', male_perc) print('Percentage of females registered:', female_perc)
补充说明:关于int类型的问题
你之前用int类型得到了正确数字但无法保留两位小数,是因为int()会直接截断小数部分,丢失精度。比如如果输入的是带小数的数值(当然实际人数是整数,但计算比例时用float能保留更准确的小数),转成int就会丢失小数位,导致比例计算有误差。建议尽量用float来计算,或者如果确定输入是整数,转int也没问题,但用上面的格式化方法就能轻松保留两位小数啦。
内容的提问来源于stack exchange,提问作者Wisroix
相关产品推荐
相关产品推荐

