16

我需要一个 R 函数,无论参数有多大,它总是在小数点后返回相同的位数。我试过 round() 但它不能这样工作。这是我的例子:

Rweb:> round(111234.678912,4) # expect 111234.6789
[1] 111234.7 
Rweb:> round(111234.678912/10,4) # expect 11123.4679    
[1] 11123.47 
Rweb:> round(111234.678912/100,4) # expect 1112.3468      
[1] 1112.347 
Rweb:> round(111234.678912/1000,4)     
[1] 111.2347 
Rweb:> round(111234.678912/10000,4)     
[1] 11.1235 

如果参数是指数格式,它确实有效,但我需要使用浮点格式的数字。

4

4 回答 4

17

确实将数字四舍五入到正确的位数。但是,R 对它显示的非常大的数字的位数有限制。那就是-那些数字在那里,只是没有显示出来。

你可以这样看:

> round(111234.678912,4)
[1] 111234.7
> round(111234.678912,4) - 111234
[1] 0.6789

您可以使用formatC任何所需的位数显示它:

> n = round(111234.678912,4)
> formatC(n, format="f")
[1] "111234.6789"
> formatC(n, format="f", digits=2)
[1] "111234.68"

正如@mnel 有用地指出的那样,您还可以使用以下方法设置显示的位数(包括小数点左侧的位数)options

> options(digits=6)
> round(111234.678912,4)
[1] 111235
> options(digits=10)
> round(111234.678912,4)
[1] 111234.6789
于 2012-09-19T04:54:33.583 回答
2

对于像我一样认为问题将是关于 bignums 的其他任何人 :-),有这个需要思考 :-)

 Rgames> bfoo<-mpfr("1.234545678909887665453421")
 Rgames> bfoo
 1 'mpfr' number of precision  84   bits 
  [1] 1.234545678909887665453421
 Rgames> round(bfoo,10)
 1 'mpfr' number of precision  84   bits 
 [1] 1.23454567889999999999999999`
于 2012-09-19T13:21:04.797 回答
2
let x is a number with big decimal places.
x<-1111111234.6547389758965789345

这里 x 是一个小数位大的数字,您可以根据需要格式化小数位。这样我们希望这个数字最多保留 8 位小数。

 x<-c(1111111234.6547389758965789345)
y<-formatC(x,digits=8,format="f")
 [1] "1111111234.65473890"

这里 format="f" 给出通常小数位的数字,比如 xxx.xxx。但是如果你想从这个对象 x 中获取一个整数,你可以使用 format="d"

于 2016-03-16T11:47:20.127 回答
0

关于“bignums”,@Carl Witthoft:谢谢,Carl。...当我读到它时,我确实想到了 bignums。你确定四舍五入有问题吗?看到这个:

> mpfr("1.2345456789", prec=84)
1 'mpfr' number of precision  84   bits
[1] 1.23454567889999999999999999

并注意 Rmpfr(我是维护者)确实靠近底层 MPFR 库。对于round(),我应用了 f(x) 的逻辑/原理,返回与 x 具有相同形式精度的结果。如果您想以降低形式精度进行舍入,您可以方便地使用roundMpfr()

> roundMpfr(bfoo, 32)
1 'mpfr' number of precision  32   bits 
[1] 1.2345456788
于 2013-11-23T18:55:26.643 回答