Ilya - 1 year ago 147
R Question

# R: decimal ceiling

I need a decimal variant of

`ceiling`
and
`floor`
functions. Something like
`signif`
with an option to choose in which direction to round.

For example, I need the number 2.63 to be transformed into 2.7, and not 3 (
`ceiling`
) or 2.6 (
`signif(2.63,2)`
).

The only solutions I can think of is to multiply by 10, then take
`ceiling`
and divide back by 10.
`ceiling(2.63*10)/10`

I'm sure, there must be a more elegant solution.

My questions is quite similar to this one.

@42- answer in comment seems too useful to be just left in comment, hence this wiki-post.

You can create your own functions and adapt `floor` and `ceiling` fonctions, adding a `level` option to mimic the `digits` parameter of `round` function like this:

``````floor_dec <- function(x, level=1) round(x - 5*10^(-level-1), level)
ceiling_dec <- function(x, level=1) round(x + 5*10^(-level-1), level)
``````

Examples:

``````# floor
floor_dec(1.259, 2)
[1] 1.25
floor_dec(1.9, 0)
[1] 1
floor_dec(29, -1)
[1] 20
floor_dec(1.251, 2)
[1] 1.25
floor_dec(1.2, 0)
[1] 1
floor_dec(23, -1)
[1] 20

# ceiling
ceiling_dec(1.259, 2)
[1] 1.26
ceiling_dec(1.9, 0)
[1] 2
ceiling_dec(29, -1)
[1] 30
ceiling_dec(1.251, 2)
[1] 1.26
ceiling_dec(1.2, 0)
[1] 2
ceiling_dec(23, -1)
[1] 30
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download