根据文化代码在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 函数。是的,它现在有一个带有浮点数的错误它已修复,formatCformatArray 两个函数都应该可以工作

以上是关于根据文化代码在Python中格式化数字的主要内容,如果未能解决你的问题,请参考以下文章

根据文化信息动态配置Angular中的数字格式

JavaScript:使用 .NET String.Format() 之类的文化格式化数字/货币?

检测数字格式文化设置

将数字转换为特定于文化的

NHibernate 数字格式问题 - 我在哪里设置文化?

以独立于文化的方式进行 Powershell 格式化?!对于数字