Python: как конвертировать валюту в десятичную?
У меня есть доллары в строковой переменной
dollars = '$5.99'
Как я могу преобразовать это в десятичную вместо строки, чтобы я мог делать операции с ним, как добавление долларов к нему?
9 ответов
Если вы предпочитаете просто целое число центов:
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. Потенциально более чистый способ преобразования его обратно в число с плавающей запятой (десятичное) заключается в использовании 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
Я знаю, что это старый вопрос, но это очень простой подход к вашей проблеме, который легко читается:
за:
dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */
Он также работает с большим числом, в котором может быть запятая:
dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */
Если вы хотите использовать десятичное число:
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))
Вот еще один пример преобразования грязной строки валюты в десятичную, округленную до цента:
from decimal import Decimal, ROUND_DOWN
messy = ', $1, 111.2199 ,,,'
less_messy = Decimal(''.join(messy.replace(',','').split()).replace('$',''))
converted = less_messy.quantize(Decimal(".01"), rounding=ROUND_DOWN)
print(converted)
1111.21
Другие варианты округления включают в себя: ROUND_HALF_UP
, ROUND_HALF_DOWN
, ROUND_UP