如何将格式化的数字转换为常规数字(没有逗号或小数)

时间:2017-11-09 00:21:14

标签: python python-3.x

我有一个使用语言环境模块的函数,并使用逗号分隔符和小数将数字转换为带格式的数字

def equals(self):
    data = self.e.get()
    data1 = eval(data)
    data1 = locale.format("%.2f", data1, grouping = True)
    self.ans.configure(text = "Answer: " + str(data1))

现在我需要反过来:我需要一种方法将格式化的数字转换为常规数字,不带逗号或小数。我正在使用Mac

3 个答案:

答案 0 :(得分:3)

我建议locale.atof。它的设计正是为了这个目的。在使用之前,您需要先使用setlocale设置区域设置。

In [1]: import locale

In [2]: locale.atof('2,345.50')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-298dfa9db644> in <module>()
----> 1 locale.atof('2,345.50')

/AnacondaPython/Python35/lib/python3.5/locale.py in atof(string, func)
    316 def atof(string, func=float):
    317     "Parses a string as a float according to the locale settings."
--> 318     return func(delocalize(string))
    319 
    320 def atoi(string):

ValueError: could not convert string to float: '2,345.50'

In [3]: locale.setlocale(locale.LC_ALL, '')
Out[3]: 'LC_CTYPE=en_US.UTF-8;LC_NUMERIC=en_US.UTF-8;LC_TIME=en_US.UTF-8;LC_COLLATE=C;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=en_US.UTF-8;LC_ADDRESS=en_US.UTF-8;LC_TELEPHONE=en_US.UTF-8;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=en_US.UTF-8'

In [4]: locale.atof('2,345.50')
Out[4]: 2345.5

这样做的好处是,即使对于使用','作为小数点分隔符而'.'作为千位分隔符的国际用户也可以使用。

答案 1 :(得分:1)

我确定这不是最有效的方式,我对python很新,但我可以试一试。

您是否尝试过使用replace()函数?

之类的东西
string.replace(",", "")

将删除所有逗号。您可以使用round()来删除小数。

答案 2 :(得分:-1)

你可以通过不同的道路实现这一目标。

您只需使用float(data1)将格式化的数字(字符串)转换为常规数字(浮点数)。

但是如果你想要int,你可以简单地做int(float(data1))

或者您可以通过执行data1[:data1.index(',')]

简单地修改字符串,删除','之后的任何内容