我有一个非常奇怪的问题
我通过计算生成了一个变量。然后我取了数字并创建了一个+0.02,-0.02范围(比如,Number = 7.74,UpperRange = 7.76,LowerRange = 7.72)。
之后我写了一个for循环,它应该检查Number是否在范围之间。答案必须至少为1,因为7,74在7.72-7.76之间。
但答案是假的。
但如果我检查7.73或7.75是否在范围内,答案是正确的。
只有特定的数字才会给我TRUE?为什么?
代码:
number= 7.74
upperRange = number + 0.02
lowerRange = number - 0.02
#
# This does not work!
# The length here is 1, but in real more than 1. For example purposes.
for(i in 1:length(number){
if(number[i] %in% seq(upperRange,lowerRange,0.01){
print("Number is in the range")
}
else{
print("Try again")
}
#
#
# But this works. When I change the number from 7.74 to 7.73, 7.75 or 7.76
number2 = 7.73
for(i in 1:length(number){
if(number2[i] %in% seq(upperRange,lowerRange,0.01){
print("Number2 is in the range")
}
else{
print("Try again")
}
答案 0 :(得分:2)
您的seq参数顺序错误。使用以下任一
seq(upperRange,lowerRange,-0.01)
seq(lowerRange,upperRange,0.01)
虽然对于您要完成的任务,有更好的方法可以检查数字是否介于两个数字之间。请查看此答案https://stackoverflow.com/a/41201517/3242130,了解findInterval和逻辑比较之间的示例。
<强>更新强>
您需要加载dplyr
或data.table
包或明确引用它们以使用between函数
dplyr::between(number, lowerRange, upperRange)
data.table::between(number, lowerRange, upperRange)
虽然如果您还没有使用这些套餐中的任何一种,我会坚持使用基本的内容
findInterval(number, lowerRange, upperRange)==1L
number>=lowerRange & number<=upperRange
答案 1 :(得分:0)
常见问题7.31
使用浮点数时,这是一个常见问题。
更多数据;看看价值观 -
> number= 7.74
> upperRange = number + 0.02
> lowerRange = number - 0.02
> print(number, digits = 20)
[1] 7.7400000000000002
> x <- seq(lowerRange, upperRange, by = 0.01)
> print(x, digits = 20)
[1] 7.7200000000000006 7.7300000000000004 7.7400000000000002 7.7500000000000009 7.7599999999999998
>