【问题标题】:Python 2.7, Sypder, Keeping significant Figures from before a decimalPython 2.7,Spyder,保留小数点前的有效数字
【发布时间】:2017-07-24 15:19:06
【问题描述】:

我试图弄清楚如何将所有有效数字保留在一个值中。例如,假设我想要值 'a' 和 'b':

    a = 00
    b = 00

我希望能够保留两个 0,但如果它只是恢复为“0”。我尝试在“00”之后添加小数点“.”,但这只是给出“0.0”。作为参考,我使用它来创建一个文件名供我的代码读取:

         filename = 'Folder/File' + str(a) + '-' str(b) + '.file'

一旦循环完成,“b”将被重述:

    b += 10

希望这会将 a 设置为“01”,依此类推。然后我声明如果 b 达到某个数字,则重新声明“a”值并将“b”重置为“00”:

    if b > 50:
        a += 1
        b = 00

很明显,这是我尝试基本上设置一个类似“时间”的功能。这是因为更改的文件名部分是它们的制作时间。这令人抓狂,因为我正在处理 2670 多个文件,我需要一种很好的方法来设置它们以供阅读。

【问题讨论】:

    标签: python python-2.7 spyder


    【解决方案1】:

    您可以在计算filename 时使用string formatting 创建填充,而不是尝试填充ab

    filename = 'Folder/File%02d-%02d.file' % (a, b)
    

    【讨论】:

    • 您能进一步解释一下吗?我不是最擅长编码 python :(
    • @EoinMansfield 我编辑的链接应该可以解释事情
    • 谢谢,我可以用它来帮助写文件名。但是,现在当我执行“if”语句时,它声明它需要一个数字而不是字符串。 D:if s1 > 50:m1 += 1s1 = '%(s)02d' % {"s": 00}
    • 该代码是缩进的,'m1' 和 's1' 定义缩进到 'if' 语句。我不知道如何让它出现。
    • @EoinMansfield 将 m1s1 保留为普通的旧整数,并在需要创建文件名时对其进行格式化。
    【解决方案2】:

    在计算机语言中,数字在内部以二进制形式存储,没有格式的概念。 16、0x10、0b10000都是数字16的格式化方式。

    Python 有字符串格式来帮助解决这个问题:

    >>> x = 16
    >>> format(x,'x') # format as hexadecimal
    '10'
    >>> format(x,'b') # format as binary
    '10000'
    >>> format(x,'#x') # hexadecimal with indicator
    '0x10'
    >>> format(x,'#b') # binary with indicator
    '0b10000'
    >>> format(x,'4') # decimal with minimal length 4
    '  16'
    >>> format(x,'04') # decimal with mimimal length 4 and leading zeroes
    '0016'
    

    您可以在格式字符串中嵌入格式,并通过索引为同一参数指定不同的格式。下面以三种不同的方式格式化第一个参数(索引 0):

    >>> '{0} {0:#x} {0:#b}'.format(16)
    '16 0x10 0b10000'
    

    在 Python 3.6 中,有一些新的格式化字符串可以简化语法:

    >>> a,b,c=1,2,3
    >>> f'{c} {b} {a:02}'
    '3 2 01'
    

    你的例子:

    filename = 'Folder/File{:02}-{:02}.file'.format(a,b)
    

    Format Specification Mini-Language

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多