我有一个数字,例如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))
EG,
specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"
我正在使用此变体强制打印K小数位:
# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)
如果您只是要对数字或列表进行舍入,只需使用即可
round(data, 2)
然后,数据将舍入到小数点后2位。
您可以根据需要格式化数字,例如x
,最多小数位。这里x
是一个有很多小数位的数字。假设我们希望显示此数字的最多8个小数位:
x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"
这里format="f"
给出通常小数位的浮点数,例如xxx.xxx,digits
指定位数。相比之下,如果你想得到一个整数来显示你将使用format="d"
(很像sprintf
)。
你可以尝试我的包formattable。
> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13
好消息是,x
仍然是一个数字向量,您可以使用相同的格式进行更多的计算。
> x + 1
[1] 2.13
更好的是,数字不会丢失,您可以随时重新格式化更多数字:)
> formattable(x, digits = 6, format = "f")
[1] 1.128347
假设您要保留尾随零,则为2位小数
sprintf(5.5, fmt = '%#.2f')
这使
[1] "5.50"
正如@mpag在下面提到的那样,似乎R有时可以用这个和圆形方法给出意想不到的值,例如: sprintf(5.5550,fmt ='%#。2f')给出5.55,而不是5.56
检查函数prettyNum,格式
试用零(例如123.1240)使用sprintf(x, fmt='%#.4g')
像这样的东西:
options(digits=2)
数字选项的定义:
digits: controls the number of digits to print when printing numeric values.
如果您更喜欢有效数字到固定数字,那么signif命令可能很有用:
> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300
函数formatC()
可用于将数字格式化为两位小数。即使结果值包含尾随零,此函数也会给出两个小数位。
请注意,R中的数字对象与double precision一起存储,它为您提供(大致)16位精度的十进制数字 - 其余的将是噪声。我承认上面显示的数字可能只是一个例子,但它长22位。