scott.wilkinson at csiro.au
2007-May-14 00:46 UTC
[Rd] round(#, digits=x) unreliable for x=2 (PR#9682)
Full_Name: Scott Wilkinson Version: 2.3.1 OS: WinXP Pro Submission from: (NULL) (140.253.203.4) In the example below round() does not report to the specified number of digits when the last digit to be reported is zero: Compare behaviour for 0.897575 and 0.946251. Ditto for signif(). The number of sigfigs is ambiguous unless the reader knows this behaviour. Is this a bug or intended behaviour? Is there a work-around? #Example code: number <- 0.897575 # this one isn't reported to 2 decimal places 0.90 as expected #number <- 0.946251 # when the last reported digit is non-zero it gives expected behaviour Round3 <- round(number, digits=3) Round2 <- round(number, digits=2) #why 0.9 and not 0.90 for 0.897575? Round1 <- round(number, digits=1) Signif3 <- signif(number, digits=3) Signif2 <- signif(number, digits=2) #why 0.9 and not 0.90 0.897575? Signif1 <- signif(number, digits=1) Results <- data.frame(Round3, Round2, Round1, Signif3, Signif2, Signif1)
On 13/05/2007 8:46 PM, scott.wilkinson at csiro.au wrote:> Full_Name: Scott Wilkinson > Version: 2.3.1 > OS: WinXP Pro > Submission from: (NULL) (140.253.203.4) > > > In the example below round() does not report to the specified number of digits > when the last digit to be reported is zero: Compare behaviour for 0.897575 and > 0.946251. Ditto for signif(). The number of sigfigs is ambiguous unless the > reader knows this behaviour. Is this a bug or intended behaviour? Is there a > work-around?It's not a bug. It has nothing to do with round(), it is the way R prints numbers by default. If you ask to print 0.90, you'll get [1] 0.9 because 0.9 and 0.90 are the same number. If you want trailing zeros to print, you need to specify a format to do that, e.g. > noquote(format(0.9, nsmall=2)) [1] 0.90 The noquote stops the "" from printing. You could also use sprintf() or formatC() for more C-like format specifications. Duncan Murdoch