代码之家  ›  专栏  ›  技术社区  ›  Brandon Bertelsen

在R中格式化小数点

  •  216
  • Brandon Bertelsen  · 技术社区  · 14 年前

    我有一个数字,例如1.128347132904321674821,当输出到屏幕(或写入文件)时,我只想显示两个小数位。怎么做到的?

    x <- 1.128347132904321674821
    

    编辑:

    用途:

    options(digits=2)
    

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

    ——

    答案:圆形(X,数字=2)

    12 回复  |  直到 5 年前
        1
  •  321
  •   Jeromy Anglim    7 年前

    背景: 本页建议的一些答案(例如, 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"
    
        2
  •  25
  •   MichaelChirico    7 年前

    你可以格式化一个数字,比如 x ,最多可保留小数点。在这里 X 是一个有许多小数位的数字。假设我们希望显示该数字的最多8个小数位:

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

    在这里 format="f" 以通常的小数位表示浮点数,例如,xxx.xxx,和 digits 指定位数。相反,如果你想得到一个整数来显示,你可以使用 format="d" (很像 sprintf )

        3
  •  15
  •   Kun Ren    9 年前

    你可以试试我的包裹 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
    
        4
  •  12
  •   Mark Adamson    6 年前

    对于2个小数位,假设您希望保留尾随零

    sprintf(5.5, fmt = '%#.2f')
    

    给出

    [1] "5.50"
    

    正如@mpag在下面提到的,似乎r有时可以用这个给出意外的值,而round方法(例如sprintf(5.5550,fmt=%.2f))给出5.55,而不是5.56。

        5
  •  6
  •   ilya    12 年前

    检查函数 prettynum,格式

    要将零试用(例如123.1240),请使用 sprintf(x, fmt='%#.4g')

        6
  •  5
  •   Xavier V.    14 年前

    就像这样:

    options(digits=2)
    

    数字选项定义:

    digits: controls the number of digits to print when printing numeric values.
    
        7
  •  4
  •   Andreas    5 年前

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

    > signif(1.12345, digits = 3)
    [1] 1.12
    > signif(12.12345, digits = 3)
    [1] 12.1
    > signif(12345.12345, digits = 3)
    [1] 12300
    
        8
  •  3
  •   Chernoff    11 年前

    函数 formatC() 可用于将数字格式化为两个小数位。即使结果值包含尾随零,此函数也会给出两个小数位。

        9
  •  2
  •   nullglob    14 年前

    请注意,r中的数字对象存储在 double precision 这给了你(大概)16位小数的精度-剩下的将是噪声。我承认上面显示的数字可能只是一个例子,但它有22位长。

        10
  •  2
  •   Eldar Agalarov    10 年前

    我使用这个变量来强制打印K小数位:

    # format numeric value to K decimal places
    formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)
    
        11
  •  1
  •   Jeromy Anglim    12 年前

    在我看来应该是

    library(tutoR)
    format(1.128347132904321674821, 2)
    

    每隔一点点 online help .

        12
  •  1
  •   jared    6 年前

    如果您只想舍入一个数字或列表,只需使用

    round(data, 2)
    

    然后,数据将四舍五入到小数点后2位。