[英]Python: Converting string into decimal number
我有一个带有以下格式字符串的 python 列表:
A1 = [' "29.0" ',' "65.2" ',' "75.2" ']
如何将这些字符串转换为十进制数以对列表元素执行算术运算?
如果您希望结果为最接近的二进制浮点数,请使用float
:
result = [float(x.strip(' "')) for x in A1]
如果您希望准确存储结果,请使用Decimal
而不是float
:
from decimal import Decimal
result = [Decimal(x.strip(' "')) for x in A1]
如果您将价格(以字符串形式)转换为十进制价格,那么....
from decimal import Decimal
price = "14000,45"
price_in_decimal = Decimal(price.replace(',','.'))
如果您的字符串已经使用点作为小数点分隔符,则无需替换
由于字符串中的额外位,您将需要使用strip()
。
A2 = [float(x.strip('"')) for x in A1]
在列表理解中使用内置的 float() 函数。
A2 = [float(v.replace('"','').strip()) for v in A1]
A2 = [float(x.strip('"')) for x in A1]
有效,@Jake,但有不必要的 0
在 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 解决方案。
有两种浮点数据类型。 Float
和Decimal
。 这取决于您的程序需求,您想使用哪一个。 Decimal
提供了高水平的准确性,并且比Float
更精确。
要将值字符串转换为浮点数,只需执行以下操作:
num = "29.0"
print (float(num))
将字符串转换为十进制
from decimal import Decimal
num = "29.0"
print (Decimal(num))
对于您的具体问题,您可以使用以下代码。 两者都为我工作。
from decimal import Decimal
import re
result = [float(x.strip(' "')) for x in A1]
print(result)
#[29.0, 65.2, 75.2]
result = [Decimal(x.strip(' "')) for x in A1]
print(result)
#[Decimal('29.0'), Decimal('65.2'), Decimal('75.2')]
result = [float(re.search(r'\d+.\d+',number).group()) for number in A1]
print(result)
#[29.0, 65.2, 75.2]
result = [Decimal(re.search(r'\d+.\d+',number).group()) for number in A1]
print(result)
#[Decimal('29.0'), Decimal('65.2'), Decimal('75.2')]
如果要将字符串转换为浮点数:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.