python写货币转换_如何在Python中将货币字符串转换为浮点数?
擴展為在括號中包含負數:
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()中去除逗號。帶轉換表的replace()或translate()均可用于將開頭轉換為(--,轉換速度稍快。float()的速度最快為10-15倍,但缺乏精度,并且可能會出現語言環境問題。Decimal( )具有精度,比locale.atof()快50%,但也有語言環境問題,locale.atof()是最慢的,但最通用。
編輯:新的str.translateAPI(映射的字符None從str.translate函數移到轉換表)
In [1]: import locale, string
from decimal import Decimal
locale.setlocale(locale.LC_ALL, '')
n = ['$1,234.56','-$1,234.56','($1,234.56)', '$ -1,234.56']
In [2]: tbl = str.maketrans('(', '-', '$)')
%timeit -n10000 [locale.atof( x.translate(tbl)) for x in n]
18 μs ± 296 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [3]: tbl2 = str.maketrans('(', '-', '$,)')
%timeit -n10000 [Decimal( x.translate(tbl2)) for x in n]
3.77 μs ± 50.8 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [4]: %timeit -n10000 [float( x.translate(tbl2)) for x in n]
3.13 μs ± 66.3 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [5]: tbl3 = str.maketrans('', '', '$,)')
%timeit -n10000 [float( x.replace('(','-').translate(tbl3)) for x in n]
3.51 μs ± 84.8 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python写货币转换_如何在Python中将货币字符串转换为浮点数?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: if test 多条件_VBA语法01:
- 下一篇: python的函数式编程_Python函