r - 格式化R中的小数位

我有一个数字,例如 1.128347132904321674821,我希望在输出到屏幕(或写入文件)时仅显示两位小数。如何做到这一点?

x <- 1.128347132904321674821

编辑:

用途:

options(digits=2)

已被建议作为可能的答案。有没有办法在脚本中指定它以供一次性使用?当我将它添加到我的脚本中时,它似乎没有做任何不同的事情,而且我对大量重新输入以格式化每个数字不感兴趣(我正在自动化一个非常大的报告)。

--

答案:round(x, digits=2)

最佳答案

背景:此页面上建议的一些答案(例如,signifoptions(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" 

https://stackoverflow.com/questions/3443687/

相关文章:

python - 如何防止 Python 打印添加换行符或空格?

bash - 如何在 Bash 中输出粗体文本?

c# - 如何使用 ToString() 格式化可为空的 DateTime?

c++ - 使用 cout << 运算符时,如何用前导零填充 int?

ruby-on-rails - 在ruby中将 Camel 大小写转换为下划线大小写

windows - 在 Windows 批处理脚本中格式化日期和时间

c# - 如何在 .NET 中使用自定义格式对 TimeSpan 对象进行 String.Forma

android - 在Android中设置TextView span的颜色

formatting - 如何更改 Visual Studio Code 中的缩进?

html - 从 XML 中的 html 格式的字符串资源设置 TextView 文本