为什么不对整数进行if函数检查?

时间:2018-01-04 08:09:53

标签: r if-statement integer

所以我试图用时间步h进行递归计算,时间是t。 我想要第二个if-function(在while循环中)来检查时间t是否是整数。当t = 9时,它适用于第一个循环,但之后在t = 8,7,6,...等时忽略它。而现在我只是不明白为什么。 我会非常感谢任何帮助或想法!

h=1/12;
b1=10000;
b2=25000*0.15*12; #45000
mu_10=0.004183;
mu_12=0.002136;
mu_20=0.0050196;
mu_21=0.005;

V1_start=h*(-b1);   
V2_start=h*(b2);

t_vektor<-c(10);
V1_vektor<-c(V1_start);
V2_vektor<-c(V2_start);

t=as.integer(9);

while (t>0){ 

  if(t==1){
    V1_ny=V1_start+h*(-log(1.04)*V1_start+b1-mu_10*V1_start+mu_12*(V2_start-V1_start));
  }else{
    V1_ny=V1_start+h*(-log(1.04)*V1_start-mu_10*V1_start+mu_12*(V2_start-V1_start));
  }

  V2_ny=V2_start+h*(-log(1.04)*V2_start+b2-mu_20*V2_start+mu_21*(V1_start-V2_start));


  if(round(t)==t){
    V1_vektor<-c(V1_vektor,V1_ny);
    V2_vektor<-c(V2_vektor,V2_ny);
    t_vektor<-c(t_vektor,t);

    V2_start=V2_ny;
    V1_start=V1_ny;
    t=t-h;

  }else{
    V2_start=V2_ny;
    V1_start=V1_ny;
    t=t-h; 
    print(t)
  }

}

3 个答案:

答案 0 :(得分:2)

这与数字的存储方式有关,另请参阅here

您的案例示例,请参阅以下代码的输出:

t = 9
h=1/12
for(i in 1:12)
{
  t=t-h
}
print(t) # 8
print(t==8) # FALSE
all.equal(t,8) # TRUE

在您的情况下,请尝试:

isTRUE(all.equal(round(t),t))

希望这有帮助!

答案 1 :(得分:1)

而不是if(round(t)==t)使用:

tolerance = h/2;
if(min(abs(c(t%%1, t%%1-1))) < tolerance){
...
}

答案 2 :(得分:0)

你在t上进行测试,但是在用线条打印之前你改变t&t; t = t-h&#34 ;; 所以你没有看到女巫被测试的价值......