对于一些简单的数学运算,我想将美元值转换为十进制。
在python: how to convert currency to decimal?之后,我有
def dollars_to_decimals(dollars):
from decimal import Decimal
return Decimal(dollars.strip('$'))
现在,当我尝试:
Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)] on win32
my_item['price']
'$24,900'
x = my_item['price']
type(x)
<class 'str'>
dollars_to_decimals(x)
Traceback (most recent call last):
File "C:\PYCHARM\helpers\pydev\_pydevd_bundle\pydevd_exec2.py", line 3, in Exec
exec(exp, global_vars, local_vars)
File "<input>", line 1, in <module>
File "....\parsing.py", line 26, in dollars_to_decimals
return Decimal(dollars.strip('$'))
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]
我在做什么错了?
答案 0 :(得分:1)
您正在这里处理本地化的数据格式。这是使用语言环境模块的地方。
from decimal import Decimal
import locale
# if using *nix
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
# if using Windows
locale.setlocale(locale.LC_ALL, 'USA')
def dollars_to_decimals(dollars):
return Decimal(locale.atoi(dollars.strip('$')))
请确保指定所需的语言环境。 https://docs.microsoft.com/en-us/cpp/c-runtime-library/country-region-strings?view=vs-2019
中有Windows代码列表还要注意,如果您使用语言环境的“ atoi”方法,则可能不需要Decimal对象。
您可以考虑仅删除逗号,但是某些拉丁语言使用逗号作为小数位占位符,而其他语言则将它们用作千位分隔符,因此仅删除非数字字符可能会破坏您的转换