【问题标题】:Formatting number in Python according to culture code根据文化代码在Python中格式化数字
【发布时间】:2020-06-07 20:34:26
【问题描述】:

我正在尝试根据所使用的文化代码找到一种在 Python 中格式化数字的方法。

例如,在 R 中,有一个名为“formatC”的函数可以满足我的需要: 如果文化代码为“en-US”,则小数点为“,”,小数点为“.” (例如:1,000.00),如果文化代码是“pt-BR”,我们将有 1.000,00。

现在,我正在尝试在 Python 中执行此操作.. idk 如果有一个已经可以执行此操作的函数...有人可以帮助我吗?

【问题讨论】:

    标签: python format numbers culture


    【解决方案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 两个函数都应该可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2011-12-21
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多