Python小费计算器金额保留两位小数失效问题求助
Python小费计算器金额保留两位小数失效问题求助
嗨,我来帮你揪出这个问题的原因~
先把你的代码贴出来方便分析:
print("Welcome to the tip calculator!") bill = float(input(f"What was the total bill? £")) tip = int(input("How much tip would you like to give? 10, 12 or 15? ")) people = int(input( "How many people to split the bill? ")) tip_as_percent = tip / 100 total_tip_amount = bill * tip_as_percent total_bill = bill + total_tip_amount bill_per_person = total_bill / people final_amount = round(bill_per_person, 2) print(f"Each person should pay {final_amount}")
你遇到的问题其实不是round()函数失效了,而是浮点数的打印显示规则在搞鬼:
round(bill_per_person, 2)确实已经把数值处理成了两位小数的精度,比如计算后是10.0的话,round之后得到的是10.0(本质是浮点数,内部精度是两位,但打印时会自动省略末尾的0)- Python在打印浮点数时,如果小数部分末尾是0,会自动简化显示,比如
10.0会直接打印成10.0而非10.00,5.5会显示成5.5而非5.50
解决这个问题很简单,不需要纠结round(),直接在打印的时候指定字符串格式就行,给你两种常用方法:
方法一:直接修改print语句的f-string,强制指定显示两位小数:
print(f"Each person should pay {final_amount:.2f}")这样不管计算结果是整数、一位小数还是两位小数,都会被统一格式化为两位小数的形式显示,比如
10.0变成10.00,5.5变成5.50。方法二:如果不想直接改print语句,也可以先把结果处理成带格式的字符串再打印:
final_amount_str = "{:.2f}".format(round(bill_per_person, 2)) print(f"Each person should pay {final_amount_str}")
另外补充个小建议:如果涉及到金额类的精确计算,其实更推荐用decimal模块来处理,避免浮点数二进制存储带来的微小精度误差,但如果只是解决显示问题,上面的格式化方法完全够用啦~
内容来源于stack exchange




