Python 2.6.6中的小数和科学记数法问题



我在处理十进制值时遇到了困难,在某些情况下,我需要将这些值用作算术,而在其他情况下,则需要将其用作字符串。具体来说,我有一个费率列表,例如:

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。

相关内容

  • 没有找到相关文章

最新更新