[R] rounding down with as.integer

Mike Miller mbmiller+l at gmail.com
Thu Jan 1 00:24:57 CET 2015


This is probably a FAQ, and I don't really have a question about it, but I 
just ran across this in something I was working on:

> as.integer(1000*1.003)
[1] 1002

I didn't expect it, but maybe I should have.  I guess it's about the 
machine precision added to the fact that as.integer always rounds down:


> as.integer(1000*1.003 + 255 * .Machine$double.eps)
[1] 1002

> as.integer(1000*1.003 + 256 * .Machine$double.eps)
[1] 1003


This does it right...

> as.integer( round( 1000*1.003 ) )
[1] 1003

...but this seems to always give the same answer and it is a little faster 
in my application:

> as.integer( 1000*1.003 + .1 )
[1] 1003


FYI - I'm reading in a long vector of numbers from a text file with no 
more than three digits to the right of the decimal.  I'm converting them 
to integers and saving them in binary format.

Best,
Mike



More information about the R-help mailing list