循环的索引出错,以及是否在R中



我有一个for loop with if语句。由于某种原因,该代码没有评估i = .01何时仍在评估以前的IF语句。该代码产生以下方式:

boom for change  0.01  needs  0  quarters,  0  dimes,  0  nickels and  1  pennies 
boom for change  0.02  needs  0  quarters,  0  dimes,  0  nickels and  2  pennies 
boom for change  0.03  needs  0  quarters,  0  dimes,  0  nickels and  3  pennies 
boom for change  0.04  needs  0  quarters,  0  dimes,  0  nickels and  4  pennies 
zoom for change  0.05  needs  0  quarters,  0  dimes,  1  nickels and  0  pennies 
zoom for change  0.06  needs  0  quarters,  0  dimes,  1  nickels and  1  pennies 
zoom for change  0.07  needs  0  quarters,  0  dimes,  1  nickels and  2  pennies 
zoom for change  0.08  needs  0  quarters,  0  dimes,  1  nickels and  3  pennies 
zoom for change  0.09  needs  0  quarters,  0  dimes,  1  nickels and  4  pennies 
zoom for change  0.1  needs  0  quarters,  0  dimes,  1  nickels and  5  pennies

但是,我希望最后一行阅读

haha for change  0.1  needs  0  quarters,  1  dimes,  0  nickels and  0  pennies

这是我的代码,您可以运行并获得所有相同的结果。

testchange <- seq(.01,.1, by =.01)
q <- .25
d <- .1
n <- .05
p <- .01
qNumber <- 0
dNumber <- 0
nNumber <- 0
pNumber <- 0

for(i in testchange)
{

if(i < .05)
{pNumber <- (i*100)
testy <- "boom"}
else if( i >= .05 & i < .1)
{
testy <- "zoom"
if(i%%n == 0)
{nNumber <- (i/n)
newNum3 <- 0}
else if(i%%n != 0)
{newNum3 <- (100*(i%%n))}
if(newNum3 < 5)
{
  pNumber <- newNum3
}
} 
if( i >= .1 & i < .25)
{
testy <- "haha"
if(i%%d == 0)
{dNumber <- (i/d)
newNum2 <- 0
newNum3 <- 0}
else if(i%%d != 0)
{newNum2 <- (100*(i%%d))}
if(newNum2 >=5 )
{
  if(newNum2%%n == 0)
  {nNumber <- (i/n)
  newNum3 <- 0}
  else if(newNum2%%n != 0)
  { newNum3 <- (100*(i%%n))}
}
if(newNum2 < 5)
{
  pNumber <- newNum2
}
if(newNum3 < 5)
{
  pNumber <- newNum3
}
}
cat(testy, "for change " , i , " needs " , qNumber 
    , " quarters, " , dNumber , " dimes, " , nNumber
    , " nickels and " , pNumber , " pennies","n" )
}

这是圆形错误。循环的最后一步产生的数字非常接近,但不到0.1。如果您更改线

    if( i >= .1 & i < .25)

to

    if( i + 0.00001 >= .1 & i < .25)

您将获得您期望的答案。请注意,您应该在其他地方进行许多类似的更改。

最新更新