2014-11-17 19 views
5

Ich versuche, die Rmpfr Bibliothek mit der round() Funktion zu verwenden, um die round half to even Regel anwenden und korrekte Ergebnisse erzielen als ohne Fehler aufgrund der endlichen Genauigkeit von float Punktwerten, here beschrieben.Rmpfr Verwendung mit Präzision in R abzurunden

Bisher ist es das, was ich erreicht habe:

library(Rmpfr) 
x <- c(1.225, 1.2225, 1.22225, 1.222225) 
n <- c(2, 3, 4, 5) 
round2 <- function(x, n){ 
    sprintf(paste("%#.", n, "f", sep=""), round(mpfr(as.character(x), 200), n)) 
} 
mapply(round2, x, n) 
#[1] "1.22" "1.222" "1.2222" "1.22222" 

Aber in einigen Fällen, die ich nicht bekommen, um die gewünschten Ergebnisse:

round2(1.152, 2)# Should be 1.15 
#[1] "1.16" 

die Rmpfr docs Lesen, am roundMpfr() Funktion, es sagt:

Die mpfr Klassengruppe Methode Math2 implementiert eine Methode für Runde (x, Ziffern) whi ch rundet auf Dezimalziffern.

Aber ich kann mir nicht vorstellen, wie man es benutzt.

Wie kann ich mit Rmpfr die gewünschten Rundenergebnisse erzielen?

+0

versuchen Sie roundMpfr() anstelle von Runde(). – Thell

Antwort

3

Wenn Sie mit dem Betreuer von Rmpfr über dieses Problem sprechen, sieht es so aus, als wäre es ein Fehler in der Bibliothek.

This commit behoben das Problem.

Nach install.packages("Rmpfr") läuft die aktualisierte Version der Bibliothek zu installieren, jetzt bekomme ich:

library(Rmpfr) 
sprintf("%#.2f", round(mpfr(1.152, 200),2)) 
#[1] "1.15" 

die jetzt korrekt ist.