Hi,I just discovered a printf bug for at least the nb_NO and nn_NO locales when printing numbers with thousands separator. To reproduce:
#!/bin/bash for l in de_DE en_US nb_NO ; do echo "LC_NUMERIC=$l.UTF-8" for n in 1 100 1000 10000 100000 1000000 10000000 ; do LC_NUMERIC=$l.UTF-8 /usr/bin/printf "<%'10d>\n" $n done doneThe expected output of "%'10d" is a right-formatted number string with 10 characters.
The output of the test script is fine for e.g. LC_NUMERIC=de_DE.UTF-8 and LC_NUMERIC=en_US.UTF-8:
LC_NUMERIC=de_DE.UTF-8 < 1> < 100> < 1.000> < 10.000> < 100.000> < 1.000.000> <10.000.000> LC_NUMERIC=en_US.UTF-8 < 1> < 100> < 1,000> < 10,000> < 100,000> < 1,000,000> <10,000,000>However, for LC_NUMERIC=nb_NO.UTF-8 and LC_NUMERIC=nn_NO.UTF-8, the formatting is wrong:
LC_NUMERIC=nb_NO.UTF-8 < 1> < 100> < 1 000> < 10 000> < 100 000> <1 000 000> <10 000 000> LC_NUMERIC=nn_NO.UTF-8 < 1> < 100> < 1 000> < 10 000> < 100 000> <1 000 000> <10 000 000>I reproduced the issue with coreutils-8.32-4.1ubuntu1.1 (Ubuntu 22.04) as well as coreutils-9.3-5.fc39.x86_64 (Fedora 39).
Under FreeBSD 14.0-RELEASE (coreutils-9.4_1), the output looks slightly better but is still wrong:
LC_NUMERIC=nb_NO.UTF-8 < 1> < 100> < 1 000> < 10 000> < 100 000> <1 000 000> <10 000 000> LC_NUMERIC=nn_NO.UTF-8 < 1> < 100> < 1 000> < 10 000> < 100 000> <1 000 000> <10 000 000>May be the issue is that the thousands separator for the Norwegian locales is a space " ", while it is "."/"," for German/US English locales.
-- Best regards / Mit freundlichen Grüßen / Med vennlig hilsen ======================================================================= Thomas Dreibholz Simula Metropolitan Centre for Digital Engineering Centre for Resilient Networks and Applications Pilestredet 52 0167 Oslo, Norway ----------------------------------------------------------------------- E-Mail:dre...@simula.no Homepage:http://simula.no/people/dreibh =======================================================================
OpenPGP_signature.asc
Description: OpenPGP digital signature