[R] Bug or just a problem with the computer precision?

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Oct 4 15:44:22 CEST 2007


First, I think you are misusing numbers for what are probably character 
strings.  But with numbers,

> A <- 4709.9000
> sprintf("%7.2f", A)
[1] "4709.90"

R will never print a single number as 4709.90: it will drop the trailing 
zero.

With strings:

> A <- "4709.9000"
> substr(A, 1, 7)
[1] "4709.90"


On Thu, 4 Oct 2007, Renger van Nieuwkoop wrote:

> Hi
>
> I have the following problem: I have a lot of numbers that identify
> import goods according to the Harmonised System (8 numbers in two groups
> with a dot in between). I want to move to the
> 6 numbers (4 numbers, dot, two numbers). My trick to do this works for
> all the numbers in the Harmonised Sytem but not for this one:
>
> A<-4709.9000
> (A<-floor(100 * A ) / 100) = 4709.89
>
> But this has to be 4709.90

No, as 4709.9000 is not the exact number represented in R. Consider

> A <- 4709.9000
> round(A, 2)
[1] 4709.9
> 100*A - 470990
[1] -5.820766e-11

so A is represented a number slightly less than 4709.9000


> If I do this in Excel it works fine...Any idea how to make sure that I
> get 4709.90 and not 4709.89?

Then Excel would appear to have a different internal representation (or a 
bug).

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-help mailing list