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

4 回答 4

5

您必须指定字符串格式然后:

["%.8f" % (x) for x in rates]

这产生['0.10000000', '0.00000100', '0.00000010']. 也适用于Decimal

于 2011-04-26T04:52:30.357 回答
5
'{0:f}'.format(Decimal('0.0000001'))

以上应该对你有用

于 2011-04-26T04:59:53.367 回答
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']
>>> 
于 2011-04-26T05:02:16.593 回答
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。

于 2021-06-15T06:25:52.700 回答