我在处理十进制值时遇到了困难,在某些情况下,我需要将这些值用作算术,而在其他情况下,则需要将其用作字符串。具体来说,我有一个费率列表,例如:
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新手的赞赏。
您必须指定字符串格式,然后:
["%.8f" % (x) for x in rates]
由此产生CCD_ 1。也适用于Decimal
。
'{0:f}'.format(Decimal('0.0000001'))
以上内容应该适用于
参见% 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']
>>>
使用f-string:
>>> rates = [0.1, 0.000001, 0.0000008]
>>> [f'{r:.7f}' for r in rates]
['0.1000000', '0.0000010', '0.0000008']
字符串格式{r:.7f}
表示小数点后使用的位数,在本例中为7。