Rev 85550 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/Round.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2021 R Core Team% Distributed under GPL 2 or later\name{Round}\alias{ceiling}\alias{floor}\alias{round}\alias{signif}\alias{trunc}\title{Rounding of Numbers}\usage{ceiling(x)floor(x)trunc(x, \dots)round(x, digits = 0, \dots)signif(x, digits = 6)}\description{\code{ceiling} takes a single numeric argument \code{x} and returns anumeric vector containing the smallest integers not less than thecorresponding elements of \code{x}.\code{floor} takes a single numeric argument \code{x} and returns anumeric vector containing the largest integers not greater than thecorresponding elements of \code{x}.\code{trunc} takes a single numeric argument \code{x} and returns anumeric vector containing the integers formed by truncating the values in\code{x} toward \code{0}.\code{round} rounds the values in its first argument to the specifiednumber of decimal places (default 0). See \sQuote{Details} about\dQuote{round to even} when rounding off a 5.\code{signif} rounds the values in its first argument to the specifiednumber of \emph{significant} digits. Hence, for \code{numeric} \code{x},\code{signif(x, dig)} is the same as \code{round(x, dig - ceiling(log10(abs(x))))}.}\arguments{\item{x}{a numeric vector. Or, for \code{round} and \code{signif}, acomplex vector.}\item{digits}{integer indicating the number of decimal places(\code{round}) or significant digits (\code{signif}) to be used.For \code{round}, negative values are allowed (see \sQuote{Details}).}\item{\dots}{arguments to be passed to methods.}}\details{These are generic functions: methods can be defined for themindividually or via the \code{\link[=S3groupGeneric]{Math}} groupgeneric.Note that for rounding off a 5, the \abbr{IEC} 60559 standard (see also\sQuote{IEEE 754}) is expected to be used, \sQuote{\emph{go to the even digit}}.Therefore \code{round(0.5)} is \code{0} and \code{round(-1.5)} is\code{-2}. However, this is dependent on OS services and onrepresentation error (since e.g.\sspace{}\code{0.15} is not representedexactly, the rounding rule applies to the represented number and notto the printed number, and so \code{round(0.15, 1)} could be either\code{0.1} or \code{0.2}).Rounding to a negative number of digits means rounding to a power often, so for example \code{round(x, digits = -2)} rounds to the nearesthundred.For \code{signif} the recognized values of \code{digits} are\code{1...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.}\section{S4 methods}{These are all (internally) S4 generic.\code{ceiling}, \code{floor} and \code{trunc} are members of the\code{\link[=S4groupGeneric]{Math}} group generic. As an S4generic, \code{trunc} has only one argument.\code{round} and \code{signif} are members of the\code{\link[=S4groupGeneric]{Math2}} group generic.}\section{Warning}{The realities of computer arithmetic can cause unexpected results,especially with \code{floor} and \code{ceiling}. For example, we\sQuote{know} that \code{floor(log(x, base = 8))} for \code{x = 8} is\code{1}, but \code{0} has been seen on an \R platform. It isnormally necessary to use a tolerance.Rounding to decimal digits in binary arithmetic is non-trivial (when\code{digits != 0}) and may be surprising. Be aware that most decimalfractions are \emph{not} exactly representable in binary double precision.In \R 4.0.0, the algorithm for \code{round(x, d)}, for \eqn{d > 0}, hasbeen improved to \emph{measure} and round \dQuote{to nearest even},contrary to earlier versions of \R (or also to \code{\link{sprintf}()}or \code{\link{format}()} based rounding).}\references{\bibshow{R:Becker+Chambers+Wilks:1988}The ISO/\abbr{IEC}/IEEE 60559:2011 standard is available for money from\url{https://www.iso.org}.The IEEE 754:2008 standard is more openly documented, e.g, at\url{https://en.wikipedia.org/wiki/IEEE_754}.}\seealso{\code{\link{as.integer}}.Package \CRANpkg{round}'s \code{\link[round]{roundX}()} for severalversions or implementations of rounding, including some previous and thecurrent \R version (as \code{version = "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)}\keyword{arith}