Last modified: 2009-01-13 11:25:50 UTC

Wikimedia Bugzilla is closed!

Wikimedia has migrated from Bugzilla to Phabricator. Bug reports should be created and updated in Wikimedia Phabricator instead. Please create an account in Phabricator and add your Bugzilla email address to it.
Wikimedia Bugzilla is read-only. If you try to edit or create any bug report in Bugzilla you will be shown an intentional error message.
In order to access the Phabricator task corresponding to a Bugzilla report, just remove "static-" from its URL.
You could still run searches in Bugzilla or access your list of votes but bug reports will obviously not be up-to-date in Bugzilla.
Bug 12560 - formatnum formats template parameters instead of the returning result
formatnum formats template parameters instead of the returning result
Product: MediaWiki extensions
Classification: Unclassified
ParserFunctions (Other open bugs)
All All
: Normal normal (vote)
: ---
Assigned To: Nobody - You can work on this!
: testme
Depends on:
  Show dependency treegraph
Reported: 2008-01-09 09:03 UTC by WIKImaniac
Modified: 2009-01-13 11:25 UTC (History)
2 users (show)

See Also:
Web browser: ---
Mobile Platform: ---
Assignee Huggle Beta Tester: ---


Description WIKImaniac 2008-01-09 09:03:19 UTC
According to the wiki's default locale settings in the magic word "formatnum" leads to replacing "." by ",", e.g. {{formatnum:1.2}} results in "1,2".

If a template with some parameters is called and the result of this template should be formatted via "formatnum" a parser error occurs. This happends because the parameters contain "," and the parser expects to receive ".".


{{formatnum: {{sum|1.2|3.4}} }}

1. step of incorrect evalutation:


2. step of incorrect evaluation: (parser error in Template:Sum)

{{#expr: 1,2 + 3,4}}


{{formatnum: {{#expr: 1,2 + 3,4}} }}
Comment 1 WIKImaniac 2008-01-09 09:32:31 UTC
correction of workaround:

{{formatnum: {{#expr: 1.2 + 3.4}} }}
Comment 2 Brion Vibber 2008-01-11 20:10:32 UTC
I'm afraid there's not much to do about this other than ensure that you're using proper formatting for your math.

The system shouldn't try to guess whether input is locale-formatted or not, since there are many many ambiguous cases... does "5.000" mean five thousand or five to three decimal places? There's no way to know in isolation.
Comment 3 WIKImaniac 2008-01-11 23:39:53 UTC
Hi Brion, you missunderstood the description of the problem. The problem is the order of evaluation. The parser should evaluate "formatnum(sum(1.2, 3.4))" if I'm writing {{formatnum: {{sum|1.2|3.4}} }}. But actually the expression is evaluated in follwing order: "sum(formatnum(1.2), formatnum(3.4))" which leads to the expression "sum(1,3, 3,4)" and ends in a parser error. Of course the parser shouldn't "guess" the format of the parameters. But it should evaluate the expressions in the correct order.
Comment 4 Brion Vibber 2008-01-12 00:53:26 UTC
Can you provide the text of this Template:Sum used in your examples? It doesn't seem to be present on
Comment 5 WIKImaniac 2008-01-12 09:09:53 UTC
The Template:Sum is a fictive example and would have been coded like this:

{{#expr: {{{1|0}}} + {{{2|0}}} }}

The described problem actually occured in the template "Vorlage:Klimatabelle" and its sub-template "Vorlage:Klimatabelle/Durchschnitt" which calculates the average of twelve values.

The workaround can be found here:
Comment 6 Brion Vibber 2008-01-14 23:12:29 UTC
I'm still unable to reproduce any problem with the examples.

{{#expr: {{{1|0}}} + {{{2|0}}} }}

{{formatnum: {{sum|{{{1}}}|{{{2}}}}} }}


Tested both with old and new parser.
Comment 7 WIKImaniac 2008-01-15 08:32:05 UTC
The problem occurs with this code:


{{formatnum: {{Klimatabelle/Durchschnitt{{!}} {{{hmjan|0}}} {{!}} {{{hmfeb|0}}} {{!}} {{{hmmär|0}}} {{!}} {{{hmapr|0}}} {{!}} {{{hmmai|0}}} {{!}} {{{hmjun|0}}} {{!}} {{{hmjul|0}}} {{!}} {{{hmaug|0}}} {{!}} {{{hmsep|0}}} {{!}} {{{hmokt|0}}} {{!}} {{{hmnov|0}}} {{!}} {{{hmdez|0}}} }} }}

While Vorlage:Klimatabelle/Durchschnitt contains following code:

{{#expr: ({{{1|0}}} + {{{2|0}}} + {{{3|0}}} + {{{4|0}}} + {{{5|0}}} + {{{6|0}}} + {{{7|0}}} + {{{8|0}}} + {{{9|0}}} + {{{10|0}}} + {{{11|0}}} + {{{12|0}}}) / 12 round 1 }}

The parser error doesn't occur if I change the code of Vorlage:Klimatabelle to:

{{formatnum: {{#expr: ({{{hmjan|0}}} + {{{hmfeb|0}}} + {{{hmmär|0}}} + {{{hmapr|0}}} + {{{hmmai|0}}} + {{{hmjun|0}}} + {{{hmjul|0}}} + {{{hmaug|0}}} + {{{hmsep|0}}} + {{{hmokt|0}}} + {{{hmnov|0}}} + {{{hmdez|0}}}) / 12 round 1 }} }}
Comment 8 Brion Vibber 2008-01-16 03:49:11 UTC
Ok, sample usage:


I still can't reproduce any problem with the formatting, either with old or new parser, except this:

With the new parser (not yet live), your {{!}} usages are incorrect and the entire template fails. Use | only here.

I get 16.5 in English or 16,5 set to German.
Comment 9 Jelte (WebBoy) 2008-08-11 20:44:04 UTC
Accidentally marked as WORKSFORME.
Comment 10 Happy-melon 2009-01-13 11:25:50 UTC
But it *does* WORKFORME... :-D

Note You need to log in before you can comment on or make changes to this bug.