2017-04-24 50 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)}}