Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python将括号(字符串)中的数字转换为负整数(或浮点)?_Python - Fatal编程技术网

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

使用Python将括号(字符串)中的数字转换为负整数(或浮点)?,python,Python,在Python中,将括号(字符串)中的数字转换为负整数(或浮点)的最简单方法是什么 例如,“(4301)”到-4301,这在会计应用程序中很常见。最简单的方法是: my_str = "(4,301)" num = -int(my_str.translate(None,"(),")) 因为你是从一个系统中读取数千个分隔符,值得一提的是,我们并没有在世界各地以相同的方式使用它们,这就是为什么你应该考虑使用现场系统的原因。考虑: import locale locale.setlocale( loc

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

例如,“(4301)”到-4301,这在会计应用程序中很常见。

最简单的方法是:

my_str = "(4,301)"
num = -int(my_str.translate(None,"(),"))

因为你是从一个系统中读取数千个分隔符,值得一提的是,我们并没有在世界各地以相同的方式使用它们,这就是为什么你应该考虑使用现场系统的原因。考虑:

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

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

import re
print float(re.sub(r'^\((.*?)\)$', r'-\1', a).replace(',',''))
然后,您可以使用
locale
将其与其他答案相结合,例如:

import locale, re

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

这段代码可能会稍微长一点,但简单明了,易于维护

from pyparsing import Word, nums, OneOrMore

integer = Word(nums)

text = "blah blah (4,301) blah blah " 

parser = OneOrMore(integer)

iterator = parser.scanString( text )

try:
    while True:
        part1 =  iterator.next()
        part2 =  iterator.next()
except:
    x =  part1[0][0][0] + '.' +part2[0][0][0]
    print -float(x)

产生
-4.301

可能您想要处理正数和负数,这在目前的许多答案中是缺失的。我要给这本书增加一点内容


对于Python 3.6,也将“-”处理为0,并去除多余的空格:

def clean_num(num_string):
    bad_chars = '(),-'
    translator = str.maketrans('', '', bad_chars)
    clean_digits = num_string.translate(translator).strip()

    if clean_digits == '':
        return 0
    elif '(' in num_string:
        return -float(clean_digits)
    else:
        return float(clean_digits) 

对于本地化数字,我使用以下方法:

def clean_number(text):
    import locale
    locale.setlocale(locale.LC_NUMERIC, "Portuguese_Brazil.1252")
    tbl = str.maketrans('(', '-', 'R$ )')
    return locale.atof(text.translate(tbl))
使用Python 3.8。 第一个括号替换为减号,第二个括号被删除。
还可以删除空格和货币符号。

我不知道有什么内置方法可以做到这一点。你可以用解析逗号分隔的整数,但你需要自己处理负数。奇怪的是,有
locale.currency
可以用另一种方式来解析,但你想要的是我似乎找不到的负数的倒数。。这里已经有人问过同样的问题,但没有令人满意的答案。谢谢主席先生。我在丹麦,由于“有趣”的地方经历了各种各样的垃圾……哇,翻译太棒了!谢谢,这让我找到了
int(“(4301)”.replace(“(”,“-”).translate(None),“),”)
,这对我来说已经足够了。@PedroBraz:这不是假设。如果没有括号,它就不会翻译任何内容,只会删除任何逗号。比如说,true,但是减号在函数之外,因此即使括号是空的,它也将是负数。我的意思是,我知道如果能解决这个问题,我只是在寻找一个干净的解决方案。谢谢你的回答@PaulGriffiths,我想PedroBraz是在指出,如果你将my_str设置为'4301',num将设置为-4301。从上面的评论可以清楚地看出,这不是silvernightstar想要的行为,也可能不是Pedro Braz想要的行为()。为我工作!!我们可以用额外的坏字符更新坏字符,以获得所需的结果
def clean_number(text):
    import locale
    locale.setlocale(locale.LC_NUMERIC, "Portuguese_Brazil.1252")
    tbl = str.maketrans('(', '-', 'R$ )')
    return locale.atof(text.translate(tbl))