比较时,格式化的round()函数输出不等于实际值
我试图用我的规范制作一个简单的函数,将小数从比较时,格式化的round()函数输出不等于实际值,r,R,我试图用我的规范制作一个简单的函数,将小数从1.0四舍五入到5.0。在这种情况下,输入的数字为 小于0.3的十进制元素应四舍五入为0(floor) 大于0.7的十进制元素应向上舍入(上限) 介于0.3和0.7之间的十进制元素应四舍五入为0.5 我有以下函数,但它的行为怪异。查看我发布的示例。对于1和c(2,3,4),它的行为不同 这确实可能是由于浮点数的表示。在内部,2.7%%2可以表示为2.70000000001 由于您可以将输入格式化为单个十进制数,因此也可以对模数进行格式化 my_ro
1.0
四舍五入到5.0
。在这种情况下,输入的数字为
- 小于
的十进制元素应四舍五入为0(0.3
)floor
- 大于0.7的十进制元素应向上舍入(
)上限
- 介于
和0.3
之间的十进制元素应四舍五入为0.7
0.5
1
和c(2,3,4)
,它的行为不同
这确实可能是由于浮点数的表示。在内部,2.7%%2可以表示为2.70000000001 由于您可以将输入格式化为单个十进制数,因此也可以对模数进行格式化
my_roundup <- function(x) {
x <- as.numeric(format(x, digits = 2))
stopifnot(x >= 1.0 & x <= 5.0)
floor(x) + (round(x %% 1,1) > 0.3)*0.5 + (round(x %% 1,1) > 0.7)*0.5
}
my_综述0.7)*0.5
}
以下是该函数的一个更简单版本:
my_roundup <- function(x) {
temp <- ifelse(round(x%%floor(x),1) < 0.3, 0, ifelse(round(x%%floor(x),1) <=0.7, 0.5, 1))
return(floor(x) + temp)
}
我的综述我认为这是一个。看到(1:4+0.3)%%1-0.3
,您可能会想到0
,这可能是有用的。可能是重复的,并且(1:4+0.3)%%1根据@MKBakker的评论编辑了它。谢谢,这正是我需要的。
my_roundup <- function(x) {
x <- as.numeric(format(x, digits = 2))
stopifnot(x >= 1.0 & x <= 5.0)
floor(x) + (round(x %% 1,1) > 0.3)*0.5 + (round(x %% 1,1) > 0.7)*0.5
}
my_roundup <- function(x) {
temp <- ifelse(round(x%%floor(x),1) < 0.3, 0, ifelse(round(x%%floor(x),1) <=0.7, 0.5, 1))
return(floor(x) + temp)
}