告诉某事是否为整数的函数不起作用

时间:2017-04-24 12:51:38

标签: r function integer arguments

出于某种原因我的功能" 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。

为什么会这样?

2 个答案:

答案 0 :(得分:1)

检查this

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

991!=990.99999999999989后,您获得0

答案 1 :(得分: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)}}