Home > Net >  How do I make Babel use minus signs?
How do I make Babel use minus signs?

Time:01-11

Why is it that Babel does not use the minus sign used by my locale, in functions like format_decimal()? It seems to me like this would be the very job of a library like Babel.

Is there a way I can enforce the usage of locale specific minus signs?

>>> import babel
>>> babel.__version__
'2.11.0'


>>> from babel.numbers import format_decimal, Locale
>>> l = Locale("sv_SE")
>>> l.number_symbols["minusSign"]
'−'
>>> format_decimal(-1.234, locale=l)
'-1,234'

Despite the fact that Local.number_symbols clearly contain a different character (in this case U 2212), format_decimal() (and other Babel formatting functions) use only the fallback hyphen-minus.

I am getting '-1,234' (with an hyphen-minus) where I would have expected '−1,234' (with the U 2212 minus sign).

CodePudding user response:

Babel uses the hyphen-minus ('-') by default, despite the fact that a different character may be specified in the number_symbols attribute of the Locale object.

This is because the format_decimal() function, rely on the locale module of the Python standard library to format numbers. The locale module uses the C library's localization functions, which are not always capable of handling Unicode characters like the U 2212 MINUS SIGN (minus sign used by your locale).

But you can try this:

from babel.numbers import format_decimal, Locale

l = Locale("sv_SE")

number = -1.234
minus_sign = l.number_symbols["minusSign"]
formatted_number = "{}{:,.5f}".format(minus_sign, abs(number))
  • Related