关于 r:使用上限函数舍入的不一致

Inconsistencies Rounding Up with Ceiling Function

我必须将数据框四舍五入到小数点后两位,而 1/100 的小数点总是需要四舍五入。但是,我看到我正在使用的上限函数有一些奇怪的行为。

1
2
3
4
5
6
7
8
9
10
11
a <- c(268.600, 268.700, 268.500)
b <- c(22.410, 653.423, 124.400)

df1 <- data.frame(a, b)

ceiling(df1 * 100)/100

       a      b
1 268.61  22.41
2 268.70 653.43
3 268.50 124.40

我希望 df1[1,1] 的输出为 268.60 .. 但我得到 268.61。我不确定为什么会这样; \\'a\\' 中的其他数字给出了预期的输出。我正在使用 R 版本 3.5.3

编辑:

@Akrun 发现 col A 中的问题是浮点数的结果。

我现在正在寻求帮助的是一种将 10.032 之类的数字舍入到 10.04 的方法,同时还避免由于浮点问题而将 10.000 之类的数字舍入到 10.01。

现在我被 df1[1,1] 正确舍入或 df[2,2] 正确舍入,但不是两者兼而有之。


它不完全是一个整数,所以它不是。等于 26860

1
2
(df1$a * 100)- 26860
#[1]  3.637979e-12  1.000000e+01 -1.000000e+01

ceiling

一起获得 round

为了避免这种情况,我们可以转换成 integer

1
2
ceiling(as.integer(df1$a * 100))/100
#[1] 268.6 268.7 268.5