我有一个使用语言环境模块的函数,并使用逗号分隔符和小数将数字转换为带格式的数字
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
答案 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(',')]