mam dolarów w ciągu znaków zmiennejpython: jak przekonwertować walutę na dziesiętną?
dollars = '$5.99'
Jak przekonwertować to do przecinku zamiast ciąg tak, że można zrobić z nim operacje jak dodawanie dolarów do niego?
mam dolarów w ciągu znaków zmiennejpython: jak przekonwertować walutę na dziesiętną?
dollars = '$5.99'
Jak przekonwertować to do przecinku zamiast ciąg tak, że można zrobić z nim operacje jak dodawanie dolarów do niego?
Jest łatwy dojazd:
dollar_dec = float(dollars[1:])
Jeśli wolisz tylko całkowitą liczbę centów:
cents_int = int(round(float(dollars.strip('$'))*100))
Jeśli chcesz dziesiętny, wystarczy użyć ...
from decimal import Decimal
dollars_dec = Decimal(dollars.strip('$'))
Jeśli wiesz, że znak dolara będzie zawsze tam, możesz użyć dollars[1:]
zamiast dollars.strip('$')
, ale użycie strip()
pozwala ci również obsługiwać ciągi, które pomijają znak dolara (5.99
zamiast $5.99
).
Jeśli wolisz całkowitą liczbę centów, utrzymać go integralną całą drogę: 'D, C = dollars.strip („$”) .split (".", 2); centów = int (d) * 100 + int (c.strip() [: 2]) '. Oczywiście zakłada to, że chcesz zaokrąglić centa ułamkowe w stronę 0 (wybierz tutaj żart Supermana III). –
Decyduje o tym opcja dziesiętna. Zrobiłbym żart z 2 centów, ale jest późno. –
Jeśli chcesz użyć dziesiętny:
from decimal import Decimal
dollars = Decimal(dollars.strip('$'))
Stamtąd dodanie jest dość prosta
dollars += 1 # Would add 1 to your decimal
Najpierw zdejmować znaku '$'. Jeśli jest to zawsze konsekwentnie pierwszy znak, który jest łatwy:
dollars[1:]
Aby utrzymać centów idealny bez martwienia się o nie-idealne reprezentacji centów w zmiennoprzecinkowych, będziemy chcieli używać wartości dziesiętnych:
from decimal import *
Decimal(dollars[1:])
Poprzez pakietu dziesiętnych
>>> dollars = '$5.99'
>>> import decimal
>>> decimal.Decimal(dollars[1:])
Decimal('5.99')
>>>
Jeśli tylko będzie dodanie (a nie mnożenia lub dzielenia) rozważyć tylko przechowywanie centów zamiast dolarów, a nie za pomocą t on pakiet dziesiętny. Sugeruję użycie najprostszego narzędzia do zadania, a dziesiętny nie zapewnia żadnej wartości, jeśli tylko dodajesz dolary i centy.
Jeśli chcesz zachować co płacisz w centów do łatwego zaokrąglenia, a czasem „$” brakuje:
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))
Zakładając ciąg przechowywane w zmiennej dollars
został wygenerowany przy użyciu modułu lokalnego języka Pythona. Potencjalnie czystszym sposobem na konwersję z powrotem na zmienną (dziesiętną) jest użycie funkcji atof
z tego samego modułu. Powinno działać tak długo, jak używasz tych samych parametrów w obu kierunkach (od waluty do łańcucha i na odwrót).
na przykład:
import locale
locale.setlocale(locale.LC_ALL, '')
value = 122445.56
value_s = locale.currency(value, grouping=True)
#generates $122,445.56
do przekształcenia go z powrotem:
value2 = locale.atof(value_s[1:])
#value2 = 122445.56
value == value2 #True
Jest to jedyna odpowiedź, która uwzględnia możliwość przecinków jako separatorów tysięcy, ale również konwertuje na wartość zmiennoprzecinkową zamiast dziesiętnej, co powoduje utratę precyzji. – sherbang
Wiem, że to stare pytanie, ale jest to bardzo proste podejście do problemu, który jest czytelny:
dla:
dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */
Działa również z większej liczby, które mogą mieć przecinek w nim:
dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */
Zwykle złym pomysłem jest przechowywanie waluty w trybie zmiennoprzecinkowym. Możesz stracić precyzję i łatwo narazić swoje dane na błędy zaokrąglania. Teraz, jeśli szukasz Supermana III, dostaniesz dodatkowe pieniądze i wpuścisz je na własne konto boczne ... – Jordan
AKA Office Space; jeśli masz szczęście, nie będziesz musiał spalić budynku. – Chinasaur