我需要一个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
如果参数是指数格式但我需要使用浮动格式的数字,它确实有用。
答案 0 :(得分:13)
它 将数字四舍五入到正确的位数。但是,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
答案 1 :(得分: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`
答案 2 :(得分:1)
Array
(
[0] => Array
(
[0] => 10 May 2006
[1] => 10 July 2008
)
[1] => Array
(
[0] => 10
[1] => 10
)
[2] => Array
(
[0] =>
[1] =>
)
[3] => Array
(
[0] => 20
[1] => 20
)
[4] => Array
(
[0] => 06
[1] => 08
)
[5] => Array
(
[0] =>
[1] =>
)
)
这里x是一个带小数位的数字,你可以格式化小数位 如你所愿。 这样我们希望最多占用这个数字的8位小数。
let x is a number with big decimal places.
x<-1111111234.6547389758965789345
格式=&#34; f&#34;给出通常的小数位数,例如xxx.xxx。 但是如果你想从这个对象获得一个整数x你使用 格式=&#34; d&#34;
答案 3 :(得分:0)
关于“bignums”,@ Carl Witthoft: 谢谢,卡尔。 ......当我读到它时,我确实想过了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