Python: 将字符串转换为十进制数
我有一个包含字符串的Python列表,格式如下:
A1 = [' "29.0" ',' "65.2" ',' "75.2" ']
我该如何把这些字符串转换成十进制数字,以便对列表中的元素进行数学运算呢?
8 个回答
5
在Python中,有两种浮点数类型,分别是 Float
和 Decimal
。你选择哪种类型,主要看你需要多精确的小数。Float
计算速度快,而 Decimal
则更精确。
如果你想把一个字符串转换成浮点数,只需要这样做:
import decimal
float('1.2')
decimal.Decimal('1.2')
分析 Float
和 Decimal
对象
>>> 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 的解决方案。
24
如果你要把价格(以字符串形式表示)转换成小数价格的话……
from decimal import Decimal
price = "14000,45"
price_in_decimal = Decimal(price.replace(',','.'))
如果你的字符串已经用点号作为小数分隔符,那就不需要进行替换了。
107
如果你想要得到最接近的二进制浮点数结果,可以使用 float
:
result = [float(x.strip(' "')) for x in A1]
如果你想要精确存储结果,可以用 Decimal
来代替 float
:
from decimal import Decimal
result = [Decimal(x.strip(' "')) for x in A1]