我正在尝试使用带有Rmpfr
函数的round()
库来应用round half to even规则并获得正确的结果,而不会因浮点值的有限精度而出错,如描述here。
到目前为止,这是我所取得的成就:
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
获得所需的整数结果?
答案 0 :(得分:3)
与Rmpfr
的维护者讨论此问题,看起来这是图书馆的一个错误。
This commit解决了这个问题。
运行install.packages("Rmpfr")
以安装库的更新版本后,现在我得到:
library(Rmpfr)
sprintf("%#.2f", round(mpfr(1.152, 200),2))
#[1] "1.15"
现在这是正确的。