如果字符串中有逗号作为千位分隔符,如何将其转换为数字?

34 浏览
0 Comments

如果字符串中有逗号作为千位分隔符,如何将其转换为数字?

我有一个表示数字的字符串,其中使用逗号来分隔千位。如何在Python中将其转换为数字?

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

会生成一个ValueError错误。

我可以在尝试转换之前将逗号替换为空字符串,但这种方法感觉不对。有更好的方法吗?


对于float值,请参见如何将带有点和逗号的字符串转换为Python中的浮点数,尽管技术上基本相同。

0
0 Comments

问题的原因是字符串中包含逗号作为千位分隔符,需要将其转换为数字。解决方法是将逗号替换为空字符串,然后将结果字符串转换为int或float类型。

具体代码如下:

a = '1,000,000'
int(a.replace(',', ''))
# 输出:1000000
float(a.replace(',', ''))
# 输出:1000000.0

需要注意的是,问题的提问者表示在尝试转换之前将逗号替换为空字符串的做法感觉不对,希望能找到更好的方法。

0
0 Comments

在解析带有千位分隔符的数字时,有几种方法可以使用。但我怀疑在所有情况下,所描述的方法是否是最好的。这就是为什么我列出了其他方法。

1. 调用setlocale()的正确位置是在__main__模块中。它是全局设置,并将影响整个程序甚至C扩展(尽管请注意,LC_NUMERIC设置不是在系统级别设置的,而是由Python模拟的)。在阅读文档中的注意事项之后,请三思而行。在单个应用程序中可能没问题,但永远不要在面向广大受众的库中使用它。可能应该避免使用某些特定字符集编码请求区域设置,因为某些系统上可能没有可用。

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

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

3. 如果不想安装第三方库来以“正确的方式”进行操作,则可以编写自己的解析函数。当不需要严格验证时,它可以像int(data.replace(',', ''))这样简单。

对于推荐简单方法给予+1。当我遇到同样的问题时,这就是我所需要的。

编辑以更正一个拼写错误(setlocate应该是setlocale)。此外,+1。

无耻的自我推销,我使用了第三个选项。因此,如果有人感兴趣,请查看这个问题/答案

0
0 Comments

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

在Python中,有时候我们需要将带有逗号作为千位分隔符的字符串转换为数字。例如,将字符串'1,000,000'转换为整数1000000。这个问题的出现原因是在一些国家,人们习惯使用逗号作为千位分隔符,但在编程中,逗号通常用作数据的分隔符,所以需要找到一种方法来处理这种情况。

解决这个问题的方法之一是使用Python的locale模块。locale模块提供了一种方法来处理不同地区的数字格式。首先,我们需要设置locale,告诉Python我们希望使用的地区设置。在这个例子中,我们使用'en_US.UTF-8'作为地区设置。然后,我们可以使用locale模块中的atoi函数将带有逗号的字符串转换为整数,或者使用atof函数将带有逗号的字符串转换为浮点数。例如,可以使用locale.atoi('1,000,000')将字符串'1,000,000'转换为整数1000000。

在代码示例中,我们可以看到如何使用locale模块来解决这个问题。首先,我们导入locale模块,然后使用locale.setlocale函数设置地区设置为'en_US.UTF-8'。接下来,我们可以使用locale.atoi函数将字符串'1,000,000'转换为整数1000000,或者使用locale.atof函数将字符串'1,000,000.53'转换为浮点数1000000.53。

然而,在某些情况下,可能会遇到locale错误,提示"unsupported locale setting"。这是因为所使用的地区设置在当前系统中不可用。在Linux系统上,可以使用"locale -a"命令查看系统中可用的地区设置。而在Windows系统上,可以尝试使用这个SO答案中提到的方法来查找可用的地区设置。

总结起来,要将带有逗号作为千位分隔符的字符串转换为数字,可以使用Python的locale模块。首先,需要设置合适的地区设置,然后使用locale.atoi函数将字符串转换为整数,或者使用locale.atof函数将字符串转换为浮点数。需要注意的是,有时候可能会遇到locale错误,这时候需要查找系统中可用的地区设置。

0