如何格式化具有指定精度级别的数字?

时间:2011-03-07 22:14:36

标签: r format

我想创建一个函数,它返回一个数字向量精度,只有 n 有效数字反映,但没有尾随零,而不是科学记数法

例如,我想

somenumbers <- c(0.000001234567, 1234567.89)
myformat(x = somenumbers, n = 3)

返回

[1] 0.00000123  1230000

我一直在玩formatformatCsprintf,但他们似乎并不想独立处理每个数字,而是将数字作为字符串返回(引号中)。

这是我最接近的例子:

> format(signif(somenumbers,4), scientific=FALSE)
[1] "      0.000001235" "1235000.000000000"

3 个答案:

答案 0 :(得分:7)

您可以使用signif函数舍入到给定的有效位数。如果你不想要额外的尾随0,那么不要“打印”结果,而是用它们做其他事情。

> somenumbers <- c(0.000001234567, 1234567.89) 
> options(scipen=5)
> cat(signif(somenumbers,3),'\n')
0.00000123 1230000 
> 

答案 1 :(得分:5)

sprintf似乎这样做了:

sprintf(c("%1.8f", "%1.0f"), signif(somenumbers, 3))
[1] "0.00000123" "1230000"

答案 2 :(得分:1)

怎么样

myformat <- function(x, n) {
    noquote(sapply(a,function(x) format(signif(x,2), scientific=FALSE)))
}