Replacement for snprintf
lithium iodate
whatdoiknow at doesntexist.net
Wed Nov 6 17:05:34 UTC 2019
On Wednesday, 6 November 2019 at 13:25:38 UTC, berni44 wrote:
> a) I need to create some test. As far as I know, I've to
> execute "export LANG=de_DE.UTF-8" (in bash, debian) to make it
> use the german locale, which should replace the dot by a comma.
> Unfortunately writefln!"%.10f"(0.1) still writes a dot instead
> of the expected ",". Instead of "LANG" I tried several other
> stuff, like LC_ALL or LC_NUMERIC. Any idea what I do wrong here?
If D wishes to behave the same as C, this is correct behavior. C
requires the locale "C" to be activated at program startup.
The C-way to use the environment's locale is to call setlocale
for the relevant category with an empty string for the locale
value.
e. g. setlocale(LC_ALL, "")
> b) How to query the current locale from D? Actually I only need
> the number-separator in the current locale as a dchar. I found
> core.stdc.locale but do not know how to use it.
You can query the current locale of a given category by calling
setlocale with a null-pointer for the locale, it will return the
currently set locale as a C-string.
The formatting-information is returned by localeconv(). Not sure
why the docs don't show the members of lconv, but it contains
decimal_point, which is a C-string of the decimal separator.
setlocale(LC_ALL, "de_DE.UTF-8");
localeconv.decimal_point.fromStringz.writeln;
prints ","
More information about the Digitalmars-d
mailing list