у меня есть доллары в строку переменнойpython: как конвертировать валюту в десятичную?
dollars = '$5.99'
как я преобразовать это в десятичной системе, вместо строки, так что я могу сделать операции с ним, как добавить доллары к нему?
у меня есть доллары в строку переменнойpython: как конвертировать валюту в десятичную?
dollars = '$5.99'
как я преобразовать это в десятичной системе, вместо строки, так что я могу сделать операции с ним, как добавить доллары к нему?
Там легкий подход:
dollar_dec = float(dollars[1:])
Если вы предпочитаете только целое число центов:
cents_int = int(round(float(dollars.strip('$'))*100))
Если вы хотите Decimal, просто использовать ...
from decimal import Decimal
dollars_dec = Decimal(dollars.strip('$'))
Если вы знаете, что знак доллара будет всегда быть там, вы могли бы использовать dollars[1:]
вместо dollars.strip('$')
, но используя strip()
, вы также можете обрабатывать строки, которые пропускают знак доллара (5.99
вместо $5.99
).
Если вы предпочитаете целое число центов, держать его неотъемлемой весь путь: 'D, C = dollars.strip («$») .split ('.', 2); cents = int (d) * 100 + int (c.strip() [: 2]) '. Конечно, это предполагает, что вы хотите округлить дробные цента до 0 (вставьте здесь шутер Супермена III здесь). –
Десятичный вариант - тот, который нужно взять. Я бы сделал шутку в 2 цента, но уже поздно. –
Если вы хотите использовать Decimal:
from decimal import Decimal
dollars = Decimal(dollars.strip('$'))
Оттуда добавив довольно простой
dollars += 1 # Would add 1 to your decimal
Во-первых, сдирать символ '$'. Если это всегда последовательно первый символ, это легко:
dollars[1:]
Чтобы сохранить центы совершенных, не заботясь о несовершенном представлении центов с плавающей точкой, вы хотите использовать десятичные значения:
from decimal import *
Decimal(dollars[1:])
Через десятичного пакет
>>> dollars = '$5.99'
>>> import decimal
>>> decimal.Decimal(dollars[1:])
Decimal('5.99')
>>>
Если вы только собираетесь быть добавление (а не умножения или деления) рассматривают только хранения центов вместо долларов, а не с помощью т он десятичный пакет. Я предлагаю использовать простейший инструмент для задания, а десятичное значение не дает никакой ценности, если вы просто добавляете доллары и центы.
Если вы хотите сохранить денежные суммы в центах для легкого закругления, а иногда и «$» отсутствует:
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
был создан с использованием языкового модуля python. Потенциально более чистый способ конвертировать его обратно в float (decimal) - использовать функцию 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
Это единственный ответ, который учитывает возможность запятых как разделителей тысяч, но также преобразуется в float вместо десятичного, что приводит к потере точности. – sherbang
Я знаю, что это старый вопрос, но это очень простой подход к вашей проблеме, это легко читаемыми:
для:
dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */
Он также работает с большим числом, которое может иметь запятую в нем:
dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */
Как правило, плохая идея хранить валюту в качестве поплавка. Вы можете потерять точность и легко подвергнуть свои данные ошибкам округления. Теперь, если вы ищете Супермена III дополнительные деньги и запустите его на свой собственный счет ... – Jordan
AKA Office Space; если вам повезет, вам не придется сжигать здание. – Chinasaur