[Issue 20069] std.format digit grouping separator (aka thousands separator) needs to be revisited

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Jul 22 03:01:36 UTC 2019


https://issues.dlang.org/show_bug.cgi?id=20069

shove <shove at 163.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |shove at 163.com

--- Comment #1 from shove <shove at 163.com> ---
(In reply to asumface from comment #0)
> Currently the default separator used by std.format is always ','.
> With the C locale (default) the number 123456.789 is thus formatted as
> "123,456.789,000".
> If another locale is activated, the output does not match the locale and
> sometimes even becomes a mess:
> writefln("%,f", 123456.789)
> de_DE.UTF-8: "1,234,56,,789,000"
> fr_FR.UTF-8: "1,234,56,,789,000"
> fr_CH.UTF-8: "123,456.789,000"
> en_IN.UTF-8: "123,456.789,000"
> nl_NL.UTF-8: "1,234,56,,789,000"
> hak_TW:      "123,456.789,000"
> ps_AF:       "12,345,6٫,789,000"
> unm_US:      "123,456.789,000"
> 
> The printf as defined by POSIX formats the same case as follows (I'd regard
> this as the generally correct formatting):
> printf("%'f", 123456.789)
> C: "123456.789000"
> de_DE.UTF-8: "123.456,789000"
> fr_FR.UTF-8: "123 456,789000"
> fr_CH.UTF-8: "123'456.789000"
> en_IN.UTF-8: "1,23,456.789000" (non-uniform group size!)
> nl_NL.UTF-8: "123456,789000"
> hak_TW:      "12,3456.789000"
> ps_AF:       "123٬456٫789000"
> unm_US:      "12 34 56.789000"
> 
> Grouping after the decimal separator should probably be made optional as it
> kind of is nonstandard behavior (scanf doesn't appear to handle such
> grouping, for example) yet useful for human interfacing nonetheless. 
> Grouping should, unless overridden, behave according to the active locale,
> for the C locale, which is active by default, this means no grouping at all.
> This is useful because a formatted number such as 100000 is otherwise
> ambiguous for comma-decimal-users by default ("100,000").


In dealing with issue 20064, I also noticed the problems. I'll handle it
together.

--


More information about the Digitalmars-d-bugs mailing list