Template:Convert/nesting


 * Discussed at subpage: Template_talk:Convert/nesting.

The nesting limit for the measurement converter Template:Convert depends on the nesting-levels of each page which is using Convert. For most articles or infoboxes, there is no restriction for using Convert, anywhere on a page. However, for nested infoboxes, there has been a limit of using Convert down to a 2-nested if-expression (nested as, at most, if-else-if-then-convert). Many of the subtemplates are invoked when Convert rounds the resulting value (see below: ).

Example of Convert-nesting limits
Nested infoboxes are an example of reaching Convert nest-limits (in the MediaWiki markup language). In Infobox mountain, during March 2010 (when markup expressions were limited to 40-level nesting), the use of typical " elevation=97 m " caused a problem inside a 3-nested if-expression, where the 3rd if-clause generated parser-errors. However, when the precision parameter "|0" was appended to the end (as " 97 m "), then the 3-nested if-expression worked ok, because specifying precision "0" bypassed 3 of the nested Convert subtemplates, using only 16 rather than the typical 19 nested-subtemplates to compute a conversion (in March 2010). Eventually, the infobox was changed to handle the value of parameter "elevation" with a 1-level if-expression (as only if-then-convert), rather than as nested under 2 else-clauses.

Common nested subtemplates
Most conversions using Template:Convert share the same multiple nested subtemplates to determine the precision/rounding of the output amount(s). For example:
 * Template:Ordomag uses ordomag/x to set order-of-magnitude rank.

If the logic of the nested subtemplates could be simplified, in terms of the levels of stacked if-expressions invoking other subtemplates, then the total nest-levels could be reduced for a typical conversion.

Nested subtemplates for rounding
As of March 2010, the design of Convert has treated the input numbers as potentially huge, astronomical amounts, and therefore, has had complex, multi-nested rounding routines to determine the format as scientific notation, if needed, for the result. The typical display subtemplate Convert/LoffAoffSoff has invoked Convert/round to invoke the large-scale rounding routine rnd to handle large numbers, allowing possible scientific notation. Inside, then another 4 subtemplates are usually invoked, or 8 subtemplates for numbers above a million. The total of subtemplates used to auto-round the results, when using Convert, includes:


 * Template:Convert/round (view source) (protected)
 * Template:Max/2 (view source) (protected)
 * Template:Ordomag (view source) (protected)
 * Template:Ordomag/x (view source) (protected)
 * Template:Precision (view source) (protected)
 * Template:Precision/0 (view source) (protected)
 * Template:Precision/00 (view source) (protected)
 * Template:Precision/a (view source) (protected)
 * Template:Rnd (view source) (protected)
 * Template:Rnd/- (view source) (protected)
 * Template:Rnd/a ( bypassed on 15 April 2010 )
 * Template:Rnd/b1 (view source) (protected)
 * Template:Rnd/c4dec0 (view source) (protected)

If, instead of using, then a different rounding routine were used, then 4-to-8 nested subtemplates could be avoided (for each conversion). However, the rounding would still need to handle very large numbers, such as for calculations in astrophysics and celestial mechanics.


 * Also see: Template_talk:Convert - for general discussion.
 * Also see: Template_talk:Convert/density - about density conversions.
 * Also see: Template_talk:Convert/updates - for requesting protected updates.