Search code examples
pythonpython-3.xlocalizationlocalestring-formatting

Is there a simple and preferred way of German number string formatting in Python?


I am searching for the proper way of German number formatting (e.g. 1.000,1234) in Python under Windows OS.

I tried locale.setlocale but did not succeed.

Instead, I have written a function to come up with the desired output.

Is there a better way?

def ger_num(number, precision=3):
    """
    returns german formatted number as string or an empty string
    """
    if number is not None:
        try:
            my_number = "{:,f}".format(number)
        except ValueError:
            return ""

        decimals, fraction = my_number.split(".")[0], my_number.split(".")[1]
        decimals = decimals.replace(",", ".")

        if precision:
            return decimals + "," + fraction[:precision]
        else:
            return decimals

    else:
        return ""

Solution

  • You can use locale.setlocale to set the locale to de and then use locale.format to format your number:

    import locale
    locale.setlocale(locale.LC_ALL, 'de')
    print(locale.format('%.4f', 1000.1234, 1))
    

    This outputs:

    1.000,1234