python中int(x)的奇怪行为
运行此程序时python中int(x)的奇怪行为,python,floating-point,int,Python,Floating Point,Int,运行此程序时 cost = 12 money = 12.51 change = money - cost dollars = int(change) change -= dollars quarters = int(change / 0.25) change -= quarters * 0.25 dimes = int(change / 0.1) change -= dimes * 0.1 nickels = int(change / 0.05) change -= nickels *
cost = 12
money = 12.51
change = money - cost
dollars = int(change)
change -= dollars
quarters = int(change / 0.25)
change -= quarters * 0.25
dimes = int(change / 0.1)
change -= dimes * 0.1
nickels = int(change / 0.05)
change -= nickels * 0.05
pennies = int(change / 0.01)
print("""Your change is:
%i dollars
%i quarters
%i dimes
%i nickels
%i pennies
""" % (dollars, quarters, dimes, nickels, pennies))
输出是
Your change is:
0 dollars
2 quarters
0 dimes
0 nickels
0 pennies
为什么便士是0?我试着分别打印硬币,同样的事情也发生了。我也知道change/0.01
等于1.0
。出于某种原因,int(1.0)
似乎等于0
。显然不是。也许1.0
是一个实际上不是1的浮点数,它会被定义为0
旁注:删除便士上的int函数并替换为%.0f便士
有效
我猜这正是人们在说在处理金钱时不要使用浮点数时所说的
我也很确定,change/0.01等于1.0
嗯,不完全是。如果您尝试直接从Python解释器执行change/0.01
,由于浮点错误,它会返回类似0.999999999787
的内容。当然,如果你试着把它转换成整数,它会舍入到零
要避免这种情况,您可以尝试以下两种方法之一。您可以尝试使用Python中的模块,这样可以避免类似的浮点错误,也可以在开始时将change
乘以100,这样您就可以处理整数值,而不是浮点数,并相应地修改其余代码。我的完整代码:
cost = input("What is the cost in dollars? ")
money = input("Money given: ")
change = int(round(money - cost) * 100)
if change < 0:
print("You didn't pay enough!")
exit()
dollars = change / 100
change %= 100
quarters = change / 25
change %= 25
dimes = change / 10
change %= 10
nickels = change / 5
change %= 5
pennies = change
print("""Your change is:
%i dollars
%i quarters
%i dimes
%i nickels
%i pennies
""" % (dollars, quarters, dimes, nickels, pennies))
cost=input(“成本是多少美元?”)
金钱=投入(“给予的金钱:”)
变更=整数(四舍五入(货币-成本)*100)
如果变化小于0:
打印(“你付的钱不够!”)
退出()
美元=零钱/100
变动%=100
四分之一=零钱/25
变动%=25
一角硬币=零钱/10
变动%=10
镍币=零钱/5
变动%=5
便士=零钱
打印(“”您的更改是:
%我喜欢美元
%我四分之一
%我一角硬币
%我要五分镍币
%我要一便士
“%”(美元、25美分、10美分、5美分、1美分)
%.0f
对数字执行舍入,而%i
不执行舍入。还有,学数学 酷。我以为这就是发生的事。奇怪的是,python在执行change/0.01
时会打印1.0
。如果你问我,round(money-cost,2)
的结果仍然是一个近似值,因为它是以百分之一美元为单位的,并且1/100不能用二进制浮点表示<代码>更改=整数((货币-成本)*100)更好。