根据文化代码在Python中格式化数字
Posted
技术标签:
【中文标题】根据文化代码在Python中格式化数字【英文标题】:Formatting number in Python according to culture code 【发布时间】:2020-06-07 20:34:26 【问题描述】:我正在尝试根据所使用的文化代码找到一种在 Python 中格式化数字的方法。
例如,在 R 中,有一个名为“formatC”的函数可以满足我的需要: 如果文化代码为“en-US”,则小数点为“,”,小数点为“.” (例如:1,000.00),如果文化代码是“pt-BR”,我们将有 1.000,00。
现在,我正在尝试在 Python 中执行此操作.. idk 如果有一个已经可以执行此操作的函数...有人可以帮助我吗?
【问题讨论】:
【参考方案1】:您可以使用 python 内置的“语言环境”模块。我会在这里查看文档:https://docs.python.org/2/library/locale.html,但对于您的示例,您可以执行以下操作:
import locale
#note the underscore rather than -
locale.setlocale(locale.LC_ALL, 'pt_BR')
print(locale.currency(1000.00, False))
#prints '1000,00'
使用区域设置,您将能够格式化各种值以适应特定位置,而不仅仅是货币!
【讨论】:
嗯,我已经看过这个包,但它一次只接受 1 个数字。在我的情况下,我需要转换一个 np.array 数字【参考方案2】:您需要 locale 包,它具有执行特定于语言环境的格式化的功能:
https://docs.python.org/3.8/library/locale.html
【讨论】:
我会努力好好看看的!顺便说一句,谢谢【参考方案3】:这是一个接受数字的函数,d1 =',' 和 d2 ='.'例如并将所需格式的数字输出为字符串
def formatC (number, d1, d2):
real_part = int (number)
rest = str(number-int(number))[2:]
real_part_as_string = str (real_part)
k = 0
result = ''
for i in range (len(real_part_as_string)-1, -1, -1):
k = k+1
result = real_part_as_string [i] + result
if (k % 3 == 0 and i != 0):
result = d1+result
k = 0
if (not rest):
return result
return result + d2 + str (rest)
我不知道这是否正是所要求的,因为它返回一个字符串。
[编辑]
格式化数组:
def formatArray (array, d1, d2):
for element in array:
print (formatC (element, d1, d2))
示例输入:
formatArray ([1200.0, 12346], ',', '.')
【讨论】:
是的,这就是问题所在。在我的情况下,我想传递一个 np.array 数字.. @HelenaFaillace 我更新了答案,展示了如何在数组上使用它。您可以遍历数组调用此函数并将每个元素作为参数传递。 @HelenaFaillace 我还更新了 formatC 函数。此代码有效,但它返回一个字符串而不是数字。它只能用于将格式化数字列表显示为字符串输出。 使用您的新代码,只有当我在列表中收到带有一些标记点(如 1200.0)的数字时,它才有效。但是,如果我只传递一个带有数字 1200 的链接,它不会像我一样工作(1200 --> 1.200 或 1,200).. 它返回我:formatArray ([1200], '.', ',') -> .200 @HelenaFaillace 对不起,我忘了说我更新了原来的formatC
函数。是的,它现在有一个带有浮点数的错误它已修复,formatC
和 formatArray
两个函数都应该可以工作以上是关于根据文化代码在Python中格式化数字的主要内容,如果未能解决你的问题,请参考以下文章