代码之家  ›  专栏  ›  技术社区  ›  Simd

如何在Python中复制R的print(x,digitals=n)?

  •  0
  • Simd  · 技术社区  · 3 年前

    In R print(x, digits=n) 做一些有点复杂的事情。

    它总是显示小数点左边的所有数字,然后,如果右边有任何数字,它会对整个数字进行四舍五入,这样最多 n 显示数字。

    示例:

    print(2,digits=2)
    2
    print(23,digits=2)
    23
    print(23.12,digits=2)
    23
    print(2.12,digits=2)
    2.1
    print(0.126,digits=2)
    0.13
    print(23236.12,digits=6)
    23236.1
    print(123,digits=2)
    123
    

    在Python中如何做到这一点?

    你可以在网上试试这些例子 https://rdrr.io/snippets/

    2 回复  |  直到 3 年前
        1
  •  1
  •   LTJ    3 年前

    这是一个实际的问题解决方案,尽管它需要一些字符串操作,但它应该可以工作

    def my_round(value, digits):
        non_dec = str(value).split('.')[0]
        non_dec_len = len(non_dec) if non_dec != '0' else 0
        return round(value, digits - non_dec_len if digits > non_dec_len else None)
        
    
        2
  •  1
  •   gog    3 年前

    我不认为有任何内置的东西,所以你必须写一些代码,例如:

    def nd(n, ndigits):
        s = str(int(n))
        ndigits -= len(s)
        if ndigits <= 0:
            return s
        return '{:.{}f}'.format(n, ndigits)
    
    
    print(nd(1.23456, ndigits=5)) # 1.2346
    print(nd(12.3456, ndigits=5)) # 12.346
    print(nd(123.456, ndigits=5)) # 123.46
    print(nd(1234.56, ndigits=5)) # 1234.6
    print(nd(12345.6, ndigits=5)) # 12345
    print(nd(123456., ndigits=5)) # 123456
    

    如果经常需要,可以使用新的说明符创建自定义格式化程序。

        3
  •  -1
  •   AracKnight    3 年前

    您可以使用 round() function :

    print(round(23.15647, 2))
    > 23.16