我有一个数字,例如1.128347132904321674821,我想在输出到屏幕(或写入到文件)时仅显示两个小数点后的位置。要怎么做呢?

x <- 1.128347132904321674821

编辑:

用途:

options(digits=2)

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

--

答案:整数(x,数字=2)


当前回答

如果你更喜欢有效数字而不是固定数字,那么signif命令可能会有用:

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300

其他回答

就像这样:

options(digits=2)

数字选项的定义:

digits: controls the number of digits to print when printing numeric values.

我写了这个可以改进的函数,但看起来在极端情况下工作得很好。例如,在0.9995的情况下,投票正确的答案是1.00,这是不正确的。我在这个数没有小数的情况下使用这个解。

round_correct <- function(x, digits, chars = TRUE) {
  if(grepl(x = x, pattern = "\\.")) {
    y <- as.character(x)
    pos <- grep(unlist(strsplit(x = y, split = "")), pattern = "\\.", value = FALSE)
    if(chars) {
      return(substr(x = x, start = 1, stop = pos + digits))
    }
    return(
      as.numeric(substr(x = x, start = 1, stop = pos + digits))
    )
  } else {
    return(
      format(round(x, 2), nsmall = 2)
    )
  }
}

例子:

round_correct(10.59648, digits = 2)
[1] "10.59"
round_correct(0.9995, digits = 2)
[1] "0.99"
round_correct(10, digits = 2)
[1] "10.00"

你可以格式化一个数字,比如x,直到你想要的小数点。这里x是一个小数点后很多位的数。假设我们希望显示这个数字的小数点后8位:

x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"

这里format="f"给出的是小数点后的浮点数,比如xxx。Xxx, digits表示数字位数。相比之下,如果你想要显示一个整数,你可以使用format="d"(很像sprintf)。

检查prettyNum、format函数

使用sprintf(x, fmt='%#.4g')来测试0(例如123.1240)

你可以试试我的打包格式。

> # 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