在我的代码中,我想把一笔钱分成面额。我正在使用while循环来完成这个任务。然而,我的变量转换到较低的钞票/硬币太早了。你知道吗
我添加了一些print命令来隔离问题,我认为它来自第11行。你知道吗
nmoney = 1.2
print 'original: ' + str(1.2)
bills = []
denominations = [100., 20., 10., 5., 1., .25, .10, .05, .01]
n = 0
while 0<nmoney<=1000:
hbill = denominations[n] #error
while nmoney>=hbill: #possible stem of error?
bills.append(hbill)
nmoney-=hbill
print '+' + str(hbill) + ' ' + str(bills) + ' ' + str(nmoney)
n+=1
print 'SWITCH from ' + str(hbill)
print 'DONE'
我希望列表输出如下所示:
[1.0, 0.1, 0.1]
然而,名单最终是这样的:
[1.0. 0.1, 0.5, 0.01, 0.01, 0.01, 0.01]
~编辑: 当我使用1.3作为nmoney var时,得到了一个奇怪的输出。我只更改了第1行,但由于某种原因,变量中添加了一个非常小的数字。以下是输出文本的摘录:
SWITCH from 0.1
+0.05 [1.0, 0.25, 0.05] 4.16333634234e-17
SWITCH from 0.5
中间行最右边的数字是nmomey。你知道吗
正如Sıddık Açıl所指出的,这是由于浮点运算的准确性。介于0.1和0.2之间的浮点数的数量是无限的。你的电脑必须在某处划清界限。你知道吗
这个修正解决了你的问题,只记得最后再把账单除以100。你知道吗
欢迎使用堆栈溢出。你的问题是,浮点运算在计算中不是“那么”精确。你知道吗
1.2-1不是0.2。它是0.1999999999996。你知道吗
0.1999999999996-0.1是0.09999999999995(不清楚是0.1)
所以你的循环继续下去。你知道吗
相关问题 更多 >
编程相关推荐