如何格式化具有指定精度级别的数字?
Posted
技术标签:
【中文标题】如何格式化具有指定精度级别的数字?【英文标题】:How to format a number with specified level of precision? 【发布时间】:2011-03-07 22:14:35 【问题描述】:我想创建一个函数,它返回一个数字向量,其精度反映在只有 n 个有效数字,但没有尾随零,而且不是科学计数法
例如,我想要
somenumbers <- c(0.000001234567, 1234567.89)
myformat(x = somenumbers, n = 3)
返回
[1] 0.00000123 1230000
我一直在玩 format
、formatC
和 sprintf
,但他们似乎不想独立处理每个数字,他们将数字作为字符串(引号)返回。
这是我得到的最接近的例子:
> format(signif(somenumbers,4), scientific=FALSE)
[1] " 0.000001235" "1235000.000000000"
【问题讨论】:
另外,options(digits=5)
在某些情况下可能有用。
【参考方案1】:
您可以使用 signif 函数四舍五入到给定数量的有效数字。如果您不想要额外的尾随 0,则不要“打印”结果,而是对它们执行其他操作。
> somenumbers <- c(0.000001234567, 1234567.89)
> options(scipen=5)
> cat(signif(somenumbers,3),'\n')
0.00000123 1230000
>
【讨论】:
【参考方案2】:sprintf
似乎做到了:
sprintf(c("%1.8f", "%1.0f"), signif(somenumbers, 3))
[1] "0.00000123" "1230000"
【讨论】:
【参考方案3】:怎么样
myformat <- function(x, n)
noquote(sapply(a,function(x) format(signif(x,2), scientific=FALSE)))
【讨论】:
效果很好,但我希望它返回一个数字向量以上是关于如何格式化具有指定精度级别的数字?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用复合文字来“fprintf()”具有任意基数的多个格式化数字?