使用Python将括在括号(字符串)中的数字转换为负整数(或浮点数)?

sil*_*tar 10 python

在Python中,将括号(字符串)中包含的数字转换为负整数(或浮点数)的最简单方法是什么?

例如,'(4,301)'到-4301,这在会计应用程序中经常遇到.

Cro*_*man 13

最简单的方法是:

my_str = "(4,301)"
num = -int(my_str.translate(None,"(),"))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这导致我`int('(4,301)'.replace('(',' - ').translate(None,'),'))`这对我来说已经足够了. (2认同)
  • @PedroBraz:这不是假设。如果没有括号,它将不会翻译任何括号,只会删除任何逗号。 (2认同)
  • @PaulGriffiths,我认为 PedroBraz 指出,如果将 my_str 设置为“4,301”,则 num 将设置为 -4301。从上面的评论可以清楚地看出,这不是 silvernightstar 想要的行为,也可能不是 Pedro Braz 想要的行为(http://stackoverflow.com/questions/16718648/convert-a-number-enlined-in-parentheses-字符串到负整数或浮点#comment24153742_16718742)。 (2认同)

mog*_*gul 7

由于您正在从一个放入数千个分隔符的系统中读取,因此值得一提的是,我们并未在全世界使用它们,这就是您应该考虑使用区域设置系统的原因.考虑:

import locale
locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
my_str = "(4,301)"
result = -locale.atoi(my_str.translate(None,"()"))
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,先生.我在丹麦,因"有趣"的地方而经历各种各样的废话...... (3认同)

Jon*_*nts 5

假设仅删除,就足够安全,并且您可能希望将相同的函数应用于可能包含或不包含负数的值,那么:

import re
print float(re.sub(r'^\((.*?)\)$', r'-\1', a).replace(',',''))
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其与使用相结合locale,如其他答案所示,例如:

import locale, re

locale.setlocale(locale.LC_ALL, 'en_GB.UTF-8')
print locale.atof(re.sub('^\((.*?)\)$', r'-\1', a))
Run Code Online (Sandbox Code Playgroud)