我有一个数字,例如 1.128347132904321674821,我希望在输出到屏幕(或写入文件)时仅显示两位小数。如何做到这一点?
x <- 1.128347132904321674821
编辑:
用途:
options(digits=2)
已被建议作为可能的答案。有没有办法在脚本中指定它以供一次性使用?当我将它添加到我的脚本中时,它似乎没有做任何不同的事情,而且我对大量重新输入以格式化每个数字不感兴趣(我正在自动化一个非常大的报告)。
--
答案:round(x, digits=2)
背景:此页面上建议的一些答案(例如,signif
、options(digits=...)
)并不保证为任意数字显示一定数量的小数。我认为这是 R 中的一个设计功能,良好的科学实践涉及根据“significant figures”的原则显示一定数量的数字。但是,在许多领域(例如,APA style,业务报告)中,格式要求要求显示一定数量的小数位。这样做通常是出于一致性和标准化目的,而不是关注重要数字。
解决方案:
以下代码正好显示数字 x
的两位小数。
format(round(x, 2), nsmall = 2)
例如:
format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"
更通用的函数如下,其中 x
是数字,k
是要显示的小数位数。 trimws
删除任何前导空格,如果您有一个数字向量,这可能会很有用。
specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))
例如,
specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"
替代方案的讨论:
formatC answers和 sprintf answers工作得很好。但在某些情况下,它们会显示负零,这可能是不需要的。即,
formatC(c(-0.001), digits = 2, format = "f")
# [1] "-0.00"
sprintf(-0.001, fmt = '%#.2f')
# [1] "-0.00"
一种可能的解决方法如下:
formatC(as.numeric(as.character(round(-.001, 2))), digits = 2, format = "f")
# [1] "0.00"
我是一名优秀的程序员,十分优秀!