[PYTHON] 파이썬에서 통화 문자열을 부동 소수점 숫자로 변환하려면 어떻게해야합니까?
PYTHON파이썬에서 통화 문자열을 부동 소수점 숫자로 변환하려면 어떻게해야합니까?
특정 통화 형식의 숫자를 나타내는 문자열이 있습니다. 예를 들면 다음과 같습니다.
money="$6,150,593.22"
이 문자열을 숫자로 변환하고 싶습니다.
6150593.22
이것을 달성하는 가장 좋은 방법은 무엇입니까?
해결법
-
==============================
1.이 시도:
이 시도:
from re import sub from decimal import Decimal money = '$6,150,593.22' value = Decimal(sub(r'[^\d.]', '', money))
이것은 부동 소수점 대신 소수점을 사용하기 때문에 (통화를 나타내는 데 더 낫다) 몇 가지 장점이 있으며 특정 통화 기호를 하드 코딩하지 않아 로캘 문제를 피할 수 있습니다.
-
==============================
2.로캘이 올바르게 설정되어 있으면 locale.atof를 사용할 수 있지만 '$'을 수동으로 제거해야합니다.
로캘이 올바르게 설정되어 있으면 locale.atof를 사용할 수 있지만 '$'을 수동으로 제거해야합니다.
>>> import locale >>> locale.setlocale(locale.LC_ALL, 'en_US.UTF8') 'en_US.UTF8' >>> money = "$6,150,593.22" >>> locale.atof(money.strip("$")) 6150593.2199999997
-
==============================
3.괄호 안에 음수를 포함하도록 확장 :
괄호 안에 음수를 포함하도록 확장 :
In [1]: import locale, string In [2]: from decimal import Decimal In [3]: n = ['$1,234.56','-$1,234.56','($1,234.56)', '$ -1,234.56'] In [4]: tbl = string.maketrans('(','-') In [5]: %timeit -n10000 [locale.atof( x.translate(tbl, '$)')) for x in n] 10000 loops, best of 3: 31.9 æs per loop In [6]: %timeit -n10000 [Decimal( x.translate(tbl, '$,)')) for x in n] 10000 loops, best of 3: 21 æs per loop In [7]: %timeit -n10000 [float( x.replace('(','-').translate(None, '$,)')) for x in n] 10000 loops, best of 3: 3.49 æs per loop In [8]: %timeit -n10000 [float( x.translate(tbl, '$,)')) for x in n] 10000 loops, best of 3: 2.19 æs per loop
쉼표는 반드시 float () / Decimal ()에서 제거해야합니다. float ()는 10-15 배 빨라지지만 정밀도가 떨어지며 로케일 문제를 일으킬 수 있습니다. (10 진수 () )는 정밀도가 있으며 locale.atof ()보다 50 % 빠르지 만 로케일 문제가 있습니다. locale.atof ()가 가장 느리지 만 가장 일반적입니다.
-
==============================
4.통화 위치 또는 기호를 하드 코딩하지 않은 솔루션의 경우 :
통화 위치 또는 기호를 하드 코딩하지 않은 솔루션의 경우 :
raw_price = "17,30 €" import locale locale.setlocale(locale.LC_ALL, 'fr_FR.UTF8') conv = locale.localeconv() raw_numbers = raw_price.strip(conv['currency_symbol'].decode('utf-8')) amount = locale.atof(raw_numbers)
-
==============================
5.나는 몇 년 전에 같은 문제를 해결하기 위해이 기능을 만들었다.
나는 몇 년 전에 같은 문제를 해결하기 위해이 기능을 만들었다.
def money(number): number = number.strip('$') try: [num,dec]=number.rsplit('.') dec = int(dec) aside = str(dec) x = int('1'+'0'*len(aside)) price = float(dec)/x num = num.replace(',','') num = int(num) price = num + price except: price = int(number) return price
from https://stackoverflow.com/questions/8421922/how-do-i-convert-a-currency-string-to-a-floating-point-number-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] numpy 배열을 위해 해시 할 수있는 가장 효율적인 속성 (0) | 2018.10.14 |
---|---|
[PYTHON] 파이썬으로 셀렌 웹 드라이버로 텍스트를 얻는 법 (0) | 2018.10.14 |
[PYTHON] 왜 내가 TypeError를 얻는가? 'float'타입이 아닌 int로 시퀀스를 곱할 수 없습니까? (0) | 2018.10.14 |
[PYTHON] 파이썬 : HTTP 스트리밍으로 큰 파일 게시 (0) | 2018.10.13 |
[PYTHON] py2exe에서 실행 파일의 현재 디렉토리를 어떻게 얻을 수 있습니까? (0) | 2018.10.13 |