2017-04-24 20 views
0

出於某種原因,我的函數「isint」將不適用於一些分數。下面是代碼:功能,告訴如果是一個整數將不起作用

isint<-function(x){if(x!=round(x)){return(0)}else{return(1)}}

isint(1.05/1.05)給了我1個然而isint(1040.55/1.05)給了我0.1

爲什麼會出現這種情況?

回答

1

檢查this

options(digits = 20) 
1040.55/1.05 
[1] 990.99999999999989 

由於991!=990.999999999999890

0

這只是因爲算術基礎-2是不準確的基礎-10。更好的測試是使用!all.equal(x,round(x)),它允許有小的差異。例如,比較以下...

> all.equal(1040.55/1.05,991) 
[1] TRUE 
> identical(1040.55/1.05,991) 
[1] FALSE 

所以,儘量isint<-function(x){if(!all.equal(x,round(x))){return(0)}else{return(1)}}