Round {base} | R Documentation |
Rounding of Numbers
Description
ceiling
takes a single numeric argumentx
and returns anumeric vector containing the smallest integers not less than thecorresponding elements ofx
.
floor
takes a single numeric argumentx
and returns anumeric vector containing the largest integers not greater than thecorresponding elements ofx
.
trunc
takes a single numeric argumentx
and returns anumeric vector containing the integers formed by truncating the values inx
toward0
.
round
rounds the values in its first argument to the specifiednumber 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 specifiednumber ofsignificant digits. Hence, fornumeric
x
,signif(x, dig)
is the same asround(x, dig - ceiling(log10(abs(x))))
.
Usage
ceiling(x)floor(x)trunc(x, ...)round(x, digits = 0, ...)signif(x, digits = 6)
Arguments
x | a numeric vector. Or, for |
digits | integer indicating the number of decimal places( |
... | arguments to be passed to methods. |
Details
These are generic functions: methods can be defined for themindividually or via theMath
groupgeneric.
Rounding to a negative number of digits means rounding to a power often, so for exampleround(x, digits = -2)
rounds to the nearesthundred.
Forsignif
the recognized values ofdigits
are1...22
, and non-missing values are rounded to the nearestinteger in that range. Each element of the vector is rounded individually, unlike printing.
These are all primitive functions.
S4 methods
These are all (internally) S4 generic.
ceiling
,floor
andtrunc
are members of theMath
group generic. As an S4generic,trunc
has only one argument.
round
andsignif
are members of theMath2
group generic.
Warning
The realities of computer arithmetic can cause unexpected results,especially withfloor
andceiling
. For example, we‘know’ thatfloor(log(x, base = 8))
forx = 8
is1
, but0
has been seen on anR platform. It isnormally necessary to use a tolerance.
Rounding to decimal digits in binary arithmetic is non-trivial (whendigits != 0
) and may be surprising. Be aware that most decimalfractions arenot exactly representable in binary double precision.InR 4.0.0, the algorithm forround(x, d)
, ford > 0
, hasbeen improved tomeasure and round “to nearest even”,contrary to earlier versions ofR (or also tosprintf()
orformat()
based rounding).
References
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)The New S Language. Wadsworth & Brooks/Cole.
The ISO/IEC/IEEE 60559:2011 standard is available for money fromhttps://www.iso.org.
The IEEE 754:2008 standard is more openly documented, e.g, athttps://en.wikipedia.org/wiki/IEEE_754.
See Also
as.integer
.Packageround'sroundX()
for severalversions or implementations of rounding, including some previous and thecurrentR version (asversion = "3d.C"
).
Examples
round(.5 + -2:4) # IEEE / IEC rounding: -2 0 0 2 2 4 4## (this is *good* behaviour -- do *NOT* report it as bug !)( x1 <- seq(-2, 4, by = .5) )round(x1) #-- IEEE / IEC rounding !x1[trunc(x1) != floor(x1)]x1[round(x1) != floor(x1 + .5)](non.int <- ceiling(x1) != floor(x1))x2 <- pi * 100^(-1:3)round(x2, 3)signif(x2, 3)