Python:将字符串转换为十进制数

时间:2011-01-10 05:41:08

标签: python string floating-point decimal

我有一个包含这种格式的字符串的python列表:

A1 = [' "29.0" ',' "65.2" ',' "75.2" ']

如何将这些字符串转换为十进制数以对列表元素执行算术运算?

7 个答案:

答案 0 :(得分:51)

如果希望结果为最接近的二进制浮点数,请使用float

result = [float(x.strip(' "')) for x in A1]

如果您希望存储的结果完全使用Decimal而不是float

from decimal import Decimal
result = [Decimal(x.strip(' "')) for x in A1]

答案 1 :(得分:3)

由于字符串中的额外位,您需要使用strip()

A2 = [float(x.strip('"')) for x in A1]

答案 2 :(得分:3)

在列表推导中使用内置的float()函数。

A2 = [float(v.replace('"','').strip()) for v in A1]

答案 3 :(得分:3)

如果您要将价格(字符串)转换为十进制价格,那么......

from decimal import Decimal

price = "14000,45"
price_in_decimal = Decimal(price.replace(',',''))

答案 4 :(得分:1)

A2 = [float(x.strip('"')) for x in A1]有效,@ Jake,但有不必要的0

答案 5 :(得分:1)

在 Python 中有两种浮点数据类型 FloatDecimal。用例取决于您希望在程序中使用的十进制精度。 Float 很快,而 Decimal 很精确。

要将字符串转换为浮点数只需执行

import decimal
float('1.2')
decimal.Decimal('1.2')

分析 FloatDecimal 对象

>>> import sys
>>> from decimal import Decimal

>>> num = '1.2'

>>> float(num)
1.2

>>> Decimal(num)
Decimal('1.2')


>>> # Precision
>>> float(1.2)
1.2

>>> Decimal(1.2)
Decimal('1.1999999999999999555910790149937383830547332763671875')


>>> # Memory usage
>>> sys.getsizeof(Decimal(num))
104

>>> sys.getsizeof(float(num))
24


>>> # Performance
>>> %timeit float(num)
140 ns ± 2.27 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

>>> %timeit Decimal(num)
192 ns ± 9.42 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

在您的特定情况下,您可以使用 @Mark Byers 解决方案。

答案 6 :(得分:-1)

如果要将字符串转换为float:

import re
A1 = [' "29.0" ',' "65.2" ',' "75.2" ']
float_values = [float(re.search(r'\d+.\d+',number).group()) for number in A1]
print(float_values)
>>> [29.0, 65.2, 75.2]