为什么R轮功能不是大数字

时间:2012-09-19 04:52:20

标签: r math statistics rounding

我需要一个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 个答案:

答案 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