首页 > 解决方案 > RStudio中模块功能的奇怪错误

问题描述

我不得不在我必须做的一些工作上使用类似的代码并得到这个错误。基本上我无法理解为什么 R 说 234/6.5 的余数在循环内部时为 6.5,但在外部时为 0(应该如此)。

x=0
for (i in 1:100){
  x=x+3.6
  if (i==65){
    print(x)
    print(x%%6.5==0)
    print(x%%6.5)
    }
  
  if(x%%6.5==0){
    #print(i)
    break
  }
}  
x=234

x%%6.5==0

[1] 234
[1] FALSE
[1] 6.5
> x=234
> 
> x%%6.5==0
[1] TRUE

任何帮助表示赞赏,抱歉英语/解释不好

标签: r

解决方案


你可以通过四舍五入来解决这个问题。在下面的例子中,如果你四舍五入到小数点后 12 位,你会得到正确的答案。如果您四舍五入到小数点后 13 位或更多位,您将得到原始答案。

x=0
res <- NULL
for (i in 1:100){
  x=round(x+3.6, 12)
  if (i==65){
    print(x)
    print(x%%6.5==0)
    print(x%%6.5)
  }
  
  if(x%%6.5==0){
    #print(i)
    break
  }
}  

# [1] 234
# [1] TRUE
# [1] 0

x=0
for (i in 1:100){
  x=round(x+3.6, 13)
  if (i==65){
    print(x)
    print(x%%6.5==0)
    print(x%%6.5)
  }
  
  if(x%%6.5==0){
    #print(i)
    break
  }
}  

# [1] 234
# [1] FALSE
# [1] 6.5


推荐阅读