[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
address@hidden: Re: Formatted output with locale]
From: |
Martin |
Subject: |
address@hidden: Re: Formatted output with locale] |
Date: |
Wed, 16 Nov 2016 21:32:43 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Hi Guile devs,
please see my post from the guile-users mailing list concerning number
and monetary formatting below. I could reproduce the strange behaviour
in version 2.0.13. Is this a bug already known and addressed?
Thanks,
-Martin
----- Forwarded message from Vladimir Zhbanov <address@hidden> -----
Date: Mon, 14 Nov 2016 09:03:19 +0300
From: Vladimir Zhbanov <address@hidden>
To: address@hidden
Subject: Re: Formatted output with locale
Hi Martin,
On 11/13/16, address@hidden <address@hidden> wrote:
> Hi there,
> I have problems to get a proper formatting using the (ice-9 format)
> module. In my code, I need to deal with monetary figures, but I fail
> to get the correct format for my German locale.
> Let's say I have one hundred thousand Euros. The correct format to output
> this in de_DE.utf-8 would be
> 100.000,00 EUR
> (with 2 decimals)
>
> Now I tried:
> (setlocale LC_ALL "de_DE.UTF-8")
> (use-modules (ice-9 format))
> (define a 100000.00)
> (format #t "~12,2h EUR~%" a)
> (format #t "~,,12$ EUR~%" a)
> (format #t "~12,2f EUR~%" a)
>
> But this is what Guile gives to me:
> 100.000,0 EUR
> 100000.00 EUR
> 100000.00 EUR
>
> None is correct. What did I miss?
> -Martin
Looking at the `format' code for option `h' I see the procedure
`number->locale-string' is used.
OK, let's do some experiments:
scheme@(guile-user)> (setlocale LC_ALL)
$2 = "ru_RU.UTF-8"
scheme@(guile-user)> ,use (ice-9 i18n)
scheme@(guile-user)> (number->locale-string 10.0 5)
$3 = "10,0"
scheme@(guile-user)> (number->locale-string .00003 2)
$4 = "3,0e"
scheme@(guile-user)> (number->locale-string .00003 1)
$5 = "3,0"
scheme@(guile-user)> (number->locale-string .00003 3)
$6 = "3,0e-"
scheme@(guile-user)> (number->locale-string .0 3)
$7 = "-0,0"
scheme@(guile-user)> (number->locale-string .0 10)
$8 = "-0,0"
scheme@(guile-user)> (number->locale-string .0 1)
$9 = "-0,0"
Now for the procedure monetary-amount->locale-string:
scheme@(guile-user)> (monetary-amount->locale-string .0 #t)
$10 = "-0.0 RUB "
scheme@(guile-user)> (monetary-amount->locale-string 100000.0 #t)
$11 = "100\xa0000.0 RUB "
scheme@(guile-user)> (monetary-amount->locale-string .00003 #t)
$12 = "3.0e RUB "
And my guile version:
scheme@(guile-user)> (version)
$13 = "2.0.11"
It seems `number->locale-string' is broken. If I do, e.g.
(number->locale-string .00003 10)
it yields
"3,0e-5"
If the last arg decreases, it just trims the number of
characters after comma, which is wrong in this case.
Output for zero is funny, too.
Regards,
Vladimir
----- End forwarded message -----
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- address@hidden: Re: Formatted output with locale],
Martin <=