# Python: Converting string into decimal number

Each Answer to this Q is separated by one/two green lines.

I have a python list with strings in this format:

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

How do I convert those strings into decimal numbers to perform arithmetic operations on the list elements?

If you want the result as the nearest binary floating point number use `float`:

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

If you want the result stored exactly use `Decimal` instead of `float`:

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

If you are converting price (in string) to decimal price then….

``````from decimal import Decimal

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

No need for the replace if your strings already use dots as a decimal separator

You will need to use `strip()` because of the extra bits in the strings.

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

use the built in float() function in a list comprehension.

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

`A2 = [float(x.strip('"')) for x in A1]` works, @Jake , but there are unnecessary 0s

In Python there are two floating point datatypes `Float` and `Decimal`. The use case depends on the precision of decimal you want in your program. `Float` is quick and `Decimal` is precise.

To convert a string to a floating point number just do

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

Analysing `Float` and `Decimal` objects

``````>>> 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)
``````

In your particular case you can use @Mark Byers solution.

There are two floating-point data types. `Float` and `Decimal`. It depends on your program demand which one you want to use. `Decimal` provides a high level of accuracy and it’s more precise than `Float`.

To convert a value string to float just do it:

``````num = "29.0"
print (float(num))
``````

To convert string to decimal

``````from decimal import Decimal
num = "29.0"
print (Decimal(num))
``````

For your specific question, you can use the below code. Both are working for me.

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

If you are converting string to 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]
`````` The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .