python程序中若果取掉保留两位小数,算式结果是80,为什么程序运行结果是79.9999999

n=int(input("输入购买笔记本1和笔记本2的本数均为:"))
a=3n
b=5
n
y=(a+b)*(1-0.8)
print("购买笔记本1和笔记本2的数量均为:",n,"本")
print("可节省的费用为:""%.2f"%y,"元")
n的值是50
程序中取掉%.2f 和y 前的% 为什么结果是79.99999999.不是80

浮点数存在精度误差,可以在输出结果的时候加上round四舍五入下

主要是(1-0.8)部分,浮点数地精度问题

【以下回答由 GPT 生成】

问题的根本原因是Python中浮点数的精度问题。由于计算机的存储方式以及浮点数的二进制表示方式,导致有些十进制小数无法精确地表示为二进制小数,因此会出现舍入误差。

在这个具体的问题中,当去掉%.2fy前的%后,print("可节省的费用为:%.2f元" % y)这行的代码就变成了print("可节省的费用为:", y, "元"),y变量的值为79.99999999999999。

这是因为ab都是整数乘以浮点数,结果应该也是浮点数。但由于浮点数的精度问题,ab计算结果可能会带有误差,例如a可能会是149.99999999999997

在计算(a + b) * (1 - 0.8)时再次引入了浮点数的计算,这个计算中的舍入误差会累加,导致最终结果为79.99999999999999

为了解决这个问题,可以使用round()函数对结果进行四舍五入操作,使其保留两位小数。

下面是修改后的代码示例:

n = int(input("请输入购买笔记本1和笔记本2的数量:"))
a = 3 * n
b = 5 * n
y = round((a + b) * (1 - 0.8), 2)  # 使用round函数进行四舍五入操作,保留两位小数
print("购买笔记本1和笔记本2的数量为:", n, "本")
print("可节省的费用为:", y, "元")

运行以上修改后的代码,结果将会正确显示为80.00


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^