Подтвердить что ты не робот

Python: как конвертировать валюту в десятичную?

У меня есть доллары в строковой переменной

dollars = '$5.99'

как преобразовать это в десятичную строку вместо строки, чтобы я мог делать с ней операции, как добавление к ней долларов?

4b9b3361

Ответ 1

Существует простой подход:

dollar_dec = float(dollars[1:])

Ответ 2

Если вы предпочитаете только целое число центов:

cents_int = int(round(float(dollars.strip('$'))*100))

Если вы хотите десятичное число, просто используйте...

from decimal import Decimal
dollars_dec = Decimal(dollars.strip('$'))

Если вы знаете, что знак доллара всегда будет там, вы можете использовать dollars[1:] вместо dollars.strip('$'), но используя strip(), вы также можете обрабатывать строки, которые опускают знак доллара (5.99 вместо $5.99).

Ответ 3

Предполагая, что строка, хранящаяся в переменной dollars, была сгенерирована с использованием модуля языка python. Потенциально более чистый способ конвертировать его обратно в float (десятичный) - использовать функцию atof из того же модуля. Он должен работать до тех пор, пока вы используете одни и те же параметры setlocale в обоих направлениях (от валюты до строки и наоборот).

например:

import locale
locale.setlocale(locale.LC_ALL, '')
value = 122445.56
value_s = locale.currency(value, grouping=True)
#generates $122,445.56

чтобы преобразовать его обратно:

value2 = locale.atof(value_s[1:])
#value2 = 122445.56 
value == value2 #True

Ответ 4

Если вы хотите использовать Decimal:

from decimal import Decimal
dollars = Decimal(dollars.strip('$'))

Оттуда добавление довольно просто

dollars += 1 # Would add 1 to your decimal

Ответ 5

Через десятичный пакет

>>> dollars = '$5.99'
>>> import decimal
>>> decimal.Decimal(dollars[1:])
Decimal('5.99')
>>> 

Ответ 6

Если вы только собираетесь добавлять (а не умножать или делить), просто храните центы вместо долларов и не используйте десятичный пакет. Я предлагаю использовать простейший инструмент для задания, а десятичный не дает никакого значения, если вы просто добавляете доллары и центы.

Ответ 7

Сначала отключите символ '$'. Если он всегда будет первым символом, это легко:

dollars[1:]

Чтобы сохранить центы безупречно, не беспокоясь о не совершенном представлении центов в плавающей запятой, вы захотите использовать десятичные значения:

from decimal import *
Decimal(dollars[1:])

Ответ 8

Если вы хотите сохранить деньги в центах для удобства округления, а иногда "$" отсутствует:

for dollars in ('$5.99','6.77'):
    cents = int(float((dollars[1:] if dollars.startswith('$') else dollars))*100)
    print '%s = %i cents = %i dollars and %i cents' % ((dollars, cents)+divmod(cents, 100))

Ответ 9

Я знаю этот старый вопрос, но это очень простой подход к вашей проблеме, который легко читается:

для

dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */

Он также работает с большим числом, в котором может быть запятая:

dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */