You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.005.5会显示成5.5而非5.50

解决这个问题很简单,不需要纠结round(),直接在打印的时候指定字符串格式就行,给你两种常用方法:

  • 方法一:直接修改print语句的f-string,强制指定显示两位小数:

    print(f"Each person should pay {final_amount:.2f}")
    

    这样不管计算结果是整数、一位小数还是两位小数,都会被统一格式化为两位小数的形式显示,比如10.0变成10.005.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

火山引擎 最新活动