GNU bug report logs - #24990
Wrong formatted output with 'number->locale-string'

Previous Next

Package: guile;

Reported by: Martin Michel <dev <at> famic.de>

Date: Tue, 22 Nov 2016 22:09:01 UTC

Severity: normal

Done: ludo <at> gnu.org (Ludovic Courtès)

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Martin Michel <dev <at> famic.de>
Subject: bug#24990: closed (Re: bug#24990: Wrong formatted output with
 'number->locale-string')
Date: Sun, 12 Feb 2017 23:25:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#24990: Wrong formatted output with 'number->locale-string'

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 24990 <at> debbugs.gnu.org.

-- 
24990: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=24990
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: ludo <at> gnu.org (Ludovic Courtès)
To: Martin Michel <dev <at> famic.de>
Cc: Vladimir Zhbanov <vzhbanov <at> gmail.com>, 24990-done <at> debbugs.gnu.org
Subject: Re: bug#24990: Wrong formatted output with 'number->locale-string'
Date: Mon, 13 Feb 2017 00:24:00 +0100
Hi,

Martin Michel <dev <at> famic.de> skribis:

> From: Vladimir Zhbanov <vzhbanov <at> gmail.com>
> Subject: Re: Formatted output with locale
> To: dev <at> famic.de, 24990 <at> debbugs.gnu.org
> Date: Mon, 14 Nov 2016 09:03:19 +0300 (12 weeks, 6 days, 15 hours ago)
>
> Hi Martin,
>
> On 11/13/16, dev <at> famic.de <dev <at> famic.de> 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 "

I believe these are fixed by commit
4aead68cdb86ca60cc372f0cd558cadda90ddec5.

You’re welcome to do more testing and report back!

Thanks,
Ludo’.

[Message part 3 (message/rfc822, inline)]
From: Martin Michel <dev <at> famic.de>
To: bug-guile <at> gnu.org
Subject: Wrong formatted output with 'number->locale-string'
Date: Tue, 22 Nov 2016 22:48:01 +0100
Hi there,

I want to report a bug in the format module using different locales.
It seems that 'number->locale-string' and 'monetary-amount->locale-string'
are broken.
Please see below emails sent to the guile-users mailing list how to
reproduce the behaviour. The Guile version I used was 2.0.13.

Thanks,
-Martin

----- Forwarded message from Vladimir Zhbanov <vzhbanov <at> gmail.com> -----

Date: Mon, 14 Nov 2016 09:03:19 +0300
From: Vladimir Zhbanov <vzhbanov <at> gmail.com>
To: dev <at> famic.de
Subject: Re: Formatted output with locale

Hi Martin,

On 11/13/16, dev <at> famic.de <dev <at> famic.de> 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 -----

----- End forwarded message -----



This bug report was last modified 8 years and 100 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.