decimal.InvalidOperation:[<class'decimal.ConversionSyntax'>]

时间:2019-07-08 18:36:41

标签: python

对于一些简单的数学运算,我想将美元值转换为十进制。

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'>]

我在做什么错了?

1 个答案:

答案 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对象。

您可以考虑仅删除逗号,但是某些拉丁语言使用逗号作为小数位占位符,而其他语言则将它们用作千位分隔符,因此仅删除非数字字符可能会破坏您的转换