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

3

我在处理一些小数值的时候遇到了困难,这些小数值有时需要用于算术运算,有时需要作为字符串使用。具体来说,我有一个费率列表,例如:

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新手,非常感谢任何建议和指导。

4个回答

5
您需要指定字符串格式,例如:
["%.8f" % (x) for x in rates]

这将得到['0.10000000','0.00000100','0.00000010']。也适用于Decimal

5
'{0:f}'.format(Decimal('0.0000001'))

以上内容应该对您有用。

你知道如何在Python 2.6.6中完成相同的事情吗? - Syed Ali

4
请参考%格式化,尤其是浮点数转换:

'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']
>>> 

0

使用 f-strings:

>>> rates = [0.1, 0.000001, 0.0000008]
>>> [f'{r:.7f}' for r in rates]
['0.1000000', '0.0000010', '0.0000008']

字符串格式{r:.7f}表示小数点后使用的数字位数,本例中为7。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接