将字符串转换为十进制数

问题描述 投票:0回答:8

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

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

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

python string decimal
8个回答
107
投票

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

float
:

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

如果您希望准确存储结果,请使用

Decimal
而不是
float
:

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

24
投票

如果您要将价格(字符串形式)转换为小数价格,那么......

from decimal import Decimal

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

如果您的字符串已经使用点作为小数点分隔符,则无需替换


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 解决方案。


3
投票

由于字符串中存在额外的位,因此您需要使用

strip()

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

2
投票

在列表理解中使用内置的 float() 函数。

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


1
投票

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


0
投票

有两种浮点数据类型。

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

-1
投票

如果要将字符串转换为浮点数:

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]
© www.soinside.com 2019 - 2024. All rights reserved.