最安全的分配整数的方法(担心截断)

时间:2012-03-31 06:16:04

标签: r floating-point

我真的只想做像

这样的事情
x <- as.integer(c(1,2,3))

但是因为c(1,2,3)存储为浮点向量,我担心我会遇到截断问题,例如

> as.integer(1.99999999999)
[1] 1

我怎么知道我很安全?

1 个答案:

答案 0 :(得分:10)

您可以使用后缀L

> x <- c(1L, 2L, 3L)
> is.integer(x)
[1] TRUE

> x <- 1L:3L
> x
[1] 1 2 3
> is.integer(x)
[1] TRUE

或者如果您已经有一个数字向量并将其转换为整数,您可以明确地描述规则:

> x <- c(-0.01, 1.999, 2, 3.000001)
> as.integer(round(x))
[1] 0 2 2 3
> as.integer(floor(x))
[1] -1  1  2  3
> as.integer(trunc(x))
[1] 0 1 2 3
> as.integer(ceiling(x))
[1] 0 2 2 4