我的目标是检查给定数字是否在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]")
答案 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))
。