C计算结果不可理解
为什么我不能得到2的结果,而将2.2作为浮点输入 在我的代码中,2.2应该被转换为220,当它通过第一个for循环时,我应该得到剩余的20(这很好,因为它给了我8个硬币)。C计算结果不可理解,c,cs50,C,Cs50,为什么我不能得到2的结果,而将2.2作为浮点输入 在我的代码中,2.2应该被转换为220,当它通过第一个for循环时,我应该得到剩余的20(这很好,因为它给了我8个硬币)。 但是当它通过第二个循环时,我不能得到20/10=2,我总是得到1 顺便说一句,如果我只是把dime放进去,那么在for循环的每次运行中,您都在从余数中减去dime,而dime在循环的每次迭代中都在增加。让我们假设在第二个for循环之前的最初更改是20。第一次循环执行将减去10,剩下的余数为10。然后,dime增加10,现在是
但是当它通过第二个循环时,我不能得到20/10=2,我总是得到
1
顺便说一句,如果我只是把dime放进去,那么在
for
循环的每次运行中,您都在从余数中减去dime
,而dime
在循环的每次迭代中都在增加。让我们假设在第二个for
循环之前的最初更改是20。第一次循环执行将减去10,剩下的余数
为10。然后,dime
增加10,现在是20。循环条件失败,因为20>10,并且循环只运行一次
我的建议是给变量起更直观的名字,比如基本循环计数器的i
或x
和所需的dimes\u
,而不是你认为变量中有2.2的coins1
,但事实上,它可能是2.1999999999999,这比2.2稍低一点,因此导致了你看到的结果。@WernerHenze:观察得很好,尽管2.2
通常存储为2.2000000476837158203125
(0x400CCCCD
)——多一点,而不是少一点。但问题可能与此相关:为什么所有这些整数计算都是在float
类型上进行的?如果您将所有内容都更改为int
,它会神奇地工作吗?(除了第一行ask/convert to int。)@RadLexus不幸的是,由于问题已迁移,用户尚未注册,因此我怀疑您是否能得到答案