Я пытаюсь использовать библиотеку Rmpfr
с функцией round()
, чтобы применить округление половины до четного и добиться правильных результатов без ошибок из-за конечной точности значений с плавающей запятой, как описано здесь.
Пока вот чего я добился:
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"
Но в некоторых случаях я не получаю желаемых результатов:
round2(1.152, 2)# Should be 1.15
#[1] "1.16"
Читая документы Rmpfr
, в функции roundMpfr()
говорится:
Групповой метод Math2 класса mpfr реализует метод round(x, digits), который округляет до десятичных цифр.
Но я не могу понять, как его использовать.
Как я могу добиться желаемых результатов раунда, используя Rmpfr
?