检查编号是否在剪切类型间隔或范围内

时间:2019-09-06 17:52:36

标签: r

我的目标是检查给定数字是否在ViewHolders类型的间隔或范围内,例如:“ [1.86e + 03,2.43e + 03]”。我将间隔作为字符串获取。 由于某些原因,我无法确定区间的上限,因此看不到我在做什么错,区间的下限似乎可以正常工作,并且我没有将其包含在下面的代码中。

这是似乎无效的代码的一部分:

baseViewHolder

如果我运行此cut,它将返回FALSE,它应为TRUE,例如2430 <= 2.43e + 03 ...

library(readr)

IsNumLess <- function(num, interval) {

  intervalL <- unlist(strsplit(interval, ",")) #split on comma
  lastSt <- intervalL[2]      #get the whole second part
  lastNum <- parse_number(lastSt)  #get just the number, without ) or ]

if (endsWith(lastSt, ']')) #up to and including
  {
    if (!(num <= lastNum))
   {
    print(num)
    print(lastNum)
    print(num <= lastNum)  #this and line below should return the same value
    print(2430 <= 2430)
    print("f3")
    return(FALSE)
    }
  }
else # ) - up to but not including
  {
    if (!(num < lastNum))
    {
      print("f4")
      return(FALSE)
    }
  }
  return(TRUE)
}

编辑: 谢谢G5W,重复的问题链接将我带到了我需要的地方。...该行在第二个'if'中起作用:

IsNumLess(2430, "[1.86e+03,2.43e+03]")

1 个答案:

答案 0 :(得分:0)

这是在计算机中表示小数位数的准确性问题。参见here for an in depth discussion

如果您运行:

sprintf("%.54f",num)  
sprintf("%.54f",lastNum)

您将看到num != lastNum

代码中一个简单的解决方法是将print(num <= lastNum)替换为print(num < lastNum | all.equal(num, lastNum))