Python 2.7,Sypder,保留小数点前的有效数字

Python 2.7, Sypder, Keeping significant Figures from before a decimal

我想弄清楚如何将所有有效数字都保存在一个值中。例如,假设我想要值 '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

很明显,这是我尝试建立一个类似 'time' 的函数。这是因为更改的文件名部分是创建时间。这太让人抓狂了,因为我正在处理 2670 多个文件,我需要一种好方法来设置它们以供阅读。

您可以在计算 filename:

时使用 string formatting 创建填充,而不是尝试填充 ab
filename = 'Folder/File%02d-%02d.file' % (a, b)

在计算机语言中,数字在内部以二进制形式存储,没有格式化的概念。 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