5

我正在尝试使用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()函数中,它说:

mpfr 类组方法 Math2 实现了一个用于舍入到十进制数字的 round(x, digits) 方法。

但我不知道如何使用它。

如何使用 获得所需的回合结果Rmpfr

4

1 回答 1

3

与这个问题的维护者交谈Rmpfr,看起来这是图书馆的一个错误。

这个提交解决了这个问题。

运行install.packages("Rmpfr")安装库的更新版本后,现在我得到:

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

现在是正确的。

于 2014-11-29T18:34:06.300 回答