У меня есть доллары в строковой переменной
dollars = '$5.99'
как преобразовать это в десятичную строку вместо строки, чтобы я мог делать с ней операции, как добавление к ней долларов?
У меня есть доллары в строковой переменной
dollars = '$5.99'
как преобразовать это в десятичную строку вместо строки, чтобы я мог делать с ней операции, как добавление к ней долларов?
Существует простой подход:
dollar_dec = float(dollars[1:])
Если вы предпочитаете только целое число центов:
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
).
Предполагая, что строка, хранящаяся в переменной 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
Если вы хотите использовать Decimal:
from decimal import Decimal
dollars = Decimal(dollars.strip('$'))
Оттуда добавление довольно просто
dollars += 1 # Would add 1 to your decimal
Через десятичный пакет
>>> dollars = '$5.99'
>>> import decimal
>>> decimal.Decimal(dollars[1:])
Decimal('5.99')
>>>
Если вы только собираетесь добавлять (а не умножать или делить), просто храните центы вместо долларов и не используйте десятичный пакет. Я предлагаю использовать простейший инструмент для задания, а десятичный не дает никакого значения, если вы просто добавляете доллары и центы.
Сначала отключите символ '$'. Если он всегда будет первым символом, это легко:
dollars[1:]
Чтобы сохранить центы безупречно, не беспокоясь о не совершенном представлении центов в плавающей запятой, вы захотите использовать десятичные значения:
from decimal import *
Decimal(dollars[1:])
Если вы хотите сохранить деньги в центах для удобства округления, а иногда "$" отсутствует:
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))
Я знаю этот старый вопрос, но это очень простой подход к вашей проблеме, который легко читается:
для
dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */
Он также работает с большим числом, в котором может быть запятая:
dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */