背景: 本页上建议的一些答案(例如 signif
, options(digits=...)
)不能保证显示任意数字的一定数量的小数。我认为这是 R 中的设计功能,良好的科学实践涉及根据“有效 数字 ”原则显示一定数量的数字。但是,在许多领域(例如, APA 样式 、商业报告),格式要求规定显示一定数量的小数。这通常是为了一致性和标准化目的,而不是关心有效数字。
解决方案 :
以下代码精确显示数字的两位小数 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 答案 和 sprintf 答案 效果相当好。但它们在某些情况下会显示负零,这可能是不想要的。即,
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"