Skip to contents

ceiling takes a single numeric argument x and returns a numeric vector containing the smallest integers not less than the corresponding elements of x.

floor takes a single numeric argument x and returns a numeric vector containing the largest integers not greater than the corresponding elements of x.

trunc takes a single numeric argument x and returns a numeric vector containing the integers formed by truncating the values in x toward 0.

round rounds the values in its first argument to the specified number of decimal places (default 0). See ‘Details’ about “round to even” when rounding off a 5.

signif rounds the values in its first argument to the specified number of significant digits. Hence, for numeric x, signif(x, dig) is the same as round(x, dig - ceiling(log10(abs(x)))). For complex x, this is not the case, see the ‘Details’.

Usage

# S3 method for default
round(x, digits = 0)

Arguments

x

a numeric vector. Or, for round and signif, a complex vector.

digits

integer indicating the number of decimal places (round) or significant digits (signif) to be used. For round, negative values are allowed (see ‘Details’).

Details

These are generic functions: methods can be defined for them individually or via the Math group generic.

Note that for rounding off a 5, the IEC 60559 standard (see also ‘IEEE 754’) is expected to be used, ‘go to the even digit’. Therefore round(0.5) is 0 and round(-1.5) is -2. However, this is dependent on OS services and on representation error (since e.g. 0.15 is not represented exactly, the rounding rule applies to the represented number and not to the printed number, and so round(0.15, 1) could be either 0.1 or 0.2).

Rounding to a negative number of digits means rounding to a power of ten, so for example round(x, digits = -2) rounds to the nearest hundred.

For signif the recognized values of digits are 1...22, and non-missing values are rounded to the nearest integer in that range. Complex numbers are rounded to retain the specified number of digits in the larger of the components. Each element of the vector is rounded individually, unlike printing.

These are all primitive functions.

See also

Author

R core team and contributors

Examples

round(.5 + -2:4) # IEEE / IEC rounding: -2  0  0  2  2  4  4
#> [1] -2  0  0  2  2  4  4
## (this is *good* behaviour -- do *NOT* report it as bug !)

( x1 <- seq(-2, 4, by = .5) )
#>  [1] -2.0 -1.5 -1.0 -0.5  0.0  0.5  1.0  1.5  2.0  2.5  3.0  3.5  4.0
round(x1) #-- IEEE / IEC rounding !
#>  [1] -2 -2 -1  0  0  0  1  2  2  2  3  4  4
x1[trunc(x1) != floor(x1)]
#> [1] -1.5 -0.5
x1[round(x1) != floor(x1 + .5)]
#> [1] -1.5  0.5  2.5
(non.int <- ceiling(x1) != floor(x1))
#>  [1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE
#> [13] FALSE

x2 <- pi * 100^(-1:3)
round(x2, 3)
#> [1]       0.031       3.142     314.159   31415.927 3141592.654
signif(x2, 3)
#> [1] 3.14e-02 3.14e+00 3.14e+02 3.14e+04 3.14e+06