如何将带有千位分隔符的字符串转换为数字?

108 投票
12 回答
69281 浏览
提问于 2025-04-15 16:15

我有一个字符串,它表示一个数字,用逗号来分隔千位数。请问我该如何在Python中把它转换成数字呢?

>>> int("1,000,000")

这样做会产生一个 ValueError 错误。

我可以在转换之前把逗号替换成空字符串,但这样做总觉得不太对。有没有更好的方法呢?


如果是 float 类型的值,可以参考 如何在Python中将带有点和逗号的字符串转换为浮点数,虽然方法基本上是一样的。

12 个回答

21

把字符串中的逗号去掉,然后把处理后的字符串转换成一个整数(int)或者小数(float)。

>>> a = '1,000,000'
>>> int(a.replace(',' , ''))
1000000
>>> float(a.replace(',' , ''))
1000000.0
50

有几种方法可以处理带有千位分隔符的数字。我觉得@unutbu提到的方法并不一定是最好的,所以我也列出其他的方法。

  1. 调用 setlocale() 的合适位置是在 __main__ 模块里。这个设置是全局的,会影响整个程序,甚至包括C扩展(不过要注意,LC_NUMERIC的设置并不是在系统级别上设置的,而是由Python模拟的)。在使用之前,最好先阅读一下文档中的注意事项,再三考虑。对于单个应用程序来说可能没问题,但在面向广泛用户的库中绝对不要使用。最好避免请求某种特定字符集编码的区域设置,因为在某些系统上可能不可用。

  2. 使用一些第三方库来处理国际化问题。例如,PyICU允许使用任何可用的区域设置,而不会影响整个进程(甚至可以在不使用区域设置的情况下解析带有特定千位分隔符的数字):

    NumberFormat.createInstance(Locale('en_US')).parse("1,000,000").getLong()

  3. 如果你不想安装第三方库来“正确”处理这个问题,可以自己写一个解析函数。比如,当不需要严格验证时,可以简单地用 int(data.replace(',', ''))

128

在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用某个库的时候,发现它的某些功能没有按照预期工作。这种情况通常会让人感到困惑,因为我们可能不知道问题出在哪里。

为了找到解决办法,很多人会去查阅文档,或者在网上搜索相关的信息。StackOverflow就是一个很好的地方,大家可以在这里提问和回答问题。通过查看其他人的提问和回答,我们可以获得很多有用的建议和解决方案。

总之,遇到问题时,不要着急,先查阅资料,看看有没有人遇到过类似的情况,或者直接在社区里寻求帮助。

import locale
locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' ) 
locale.atoi('1,000,000')
# 1000000
locale.atof('1,000,000.53')
# 1000000.53

撰写回答