我在使用十进制值时遇到困难,在某些情况下需要用于算术,而在其他情况下则需要用作字符串。具体来说,我有一个费率列表,例如:
rates=[0.1,0.000001,0.0000001]
我正在使用它们来指定图像的压缩率。我需要最初将这些值作为数字,因为我需要能够对它们进行排序以确保它们按特定顺序排列。我还希望能够将这些值中的每一个转换为字符串,以便我可以1)将速率嵌入到文件名中,2)将速率和其他详细信息记录在CSV文件中。第一个问题是,当转换为字符串时,任何小数位数超过6的浮点数都是科学格式:
>>> str(0.0000001)
'1e-07'
所以我尝试使用Python的Decimal模块,但它也将一些浮点数转换为科学记数法(看起来与我读过的文档相反)。例如:
>>> Decimal('1.0000001')
Decimal('1.0000001')
# So far so good, it doesn't convert to scientific notation with 7 decimal places
>>> Decimal('0.0000001')
Decimal('1E-7')
# Scientific notation, back where I started.
我也在查看多个帖子中建议的字符串格式,但我没有运气。任何建议和指针都受到这个Python新手的赞赏。
答案 0 :(得分:5)
您必须指定字符串格式:
["%.8f" % (x) for x in rates]
这会产生['0.10000000', '0.00000100', '0.00000010']
。也适用于Decimal
。
答案 1 :(得分:5)
'{0:f}'.format(Decimal('0.0000001'))
以上内容适合您
答案 2 :(得分:4)
请参阅% formatting
,尤其是浮点转换:
'e'浮点指数格式(小写)。 (3)
'E'浮点指数格式(大写)。 (3)
'f'浮点十进制格式。 (3)
'F'浮点小数格式。 (3)
'g'浮点格式。如果指数小于-4或不小于精度,则使用小写指数格式,否则使用小数格式。 (4)
'G'浮点格式。如果指数小于-4或不小于精度,则使用大写指数格式,否则使用小数格式。 (4)
使用f
格式的示例。
>>> ["%10.7f" %i for i in rates]
[' 0.1000000', ' 0.0000010', ' 0.0000001']
>>>
您还可以使用较新的(起始2.6)str.format()
方法:
>>> ['{0:10.7f}'.format(i) for i in rates]
[' 0.1000000', ' 0.0000010', ' 0.0000001']
>>>
答案 3 :(得分:0)
使用 f 字符串:
>>> rates = [0.1, 0.000001, 0.0000008]
>>> [f'{r:.7f}' for r in rates]
['0.1000000', '0.0000010', '0.0000008']
字符串格式 {r:.7f}
表示小数点后使用的位数,在本例中为 7。