Template:Number table sorting
This template can be useful when building a sortable table in which a column contains both numbers and text. This template should be applied to every number in the column.
Currently, the template works for numbers less than or 10,000,000,000,000,000 (1×1016) and greater than -10,000,000,000,000,000 (-1×1016). Numbers outside this range will sort above or below other numbers depending on sign. See the Limitations section below.
By default the output is displayed using thousands separators. To display numbers as entered, use |format=no
.
The template generates a hidden "sort key" in the HTML markup which forces the Javascript sorting algorithm to sort the column alphabetically.
Purpose
There are at two cases where this template is useful:
- When numbers are followed by some text
- When numbers are preceded by some text other than a currency symbol.
Parameters
The template has only one required parameter: a real number. These examples use the name of the redirect, {{nts}}, for brevity.
- Optional parameters
prefix
: To display some text before the number, use|prefix=some prefix
{{nts|123456789.00123|prefix=approx. }}
→ approx. 123,456,789.00123
format
: To retain a number's format, use|format=no
{{nts|123456789.00123}}
→ 123,456,789.00123{{nts|123456789.00123|format=no}}
→ 123456789.00123
debug
: To display the sort key, use|debug=yes
.{{nts|123456789.00123|debug=yes}}
→ &10000000123456789001230123,456,789.00123{{nts|-123456789.00123|debug=yes}}
→ &09999999876543210998769−123,456,789.00123
Apart from the added thousands separators the numbers are formatted as supplied (scientific notation or not, leading and trailing zeros, and a zero before the decimal point or not). This formatting does not affect the sorted order except for numbers not satisfying the limitations mentioned below.
Limitations
- Any subset of numbers larger than 1×1016 are sorted as greater than 1×1016 but this subset is sorted alphabetically.
- Any subset of numbers smaller than -1×1016 are sorted as less than -1×1016 but this subset is sorted alphabetically.
- If a non-numeric value is given as the first unnamed parameter the results are undefined.
- There is a maximum of 6 digits after the decimal separator. Positive numbers with more than 6 decimal digits should sort correctly but the results for negative numbers with more that 6 decimal digits is undefined.
- A prefix (using the
prefix
parameter) does not affect the sort order.
Examples
{{nts|123456789.00123}}
→ <span style="display:none">&0000000123456789.001230</span>123,456,789.00123
For text which follows a number, {{nts|123,456}} as of 2012
displays 123,456 as of 2012
with a numerical sort key of 123456
. This forces numerical sorting in the cell using this value instead of the default alphabetical sorting.
Below are more examples, some of which illustrate the limitations listed above.
markup | sortkey and number | error spillover |
---|---|---|
{{nts|debug=yes}} |
||
{{nts||debug=yes}} |
||
{{nts|between 2 and 3|debug=yes}} |
{{Number table sorting/Expression error: Unrecognized word "between". | 1=Expression error: Unrecognized word "between".
}}between 2 and 3 |
{{nts|10|prefix=approx. |debug=yes}} |
&10000000000000010000000approx. 10 | |
{{nts|-5|debug=yes}} |
&09999999999999994999999−5 | |
{{nts|-4|debug=yes}} |
&09999999999999995999999−4 | |
{{nts|-73|debug=yes}} |
&09999999999999926999999−73 | |
{{nts|-67|debug=yes}} |
&09999999999999932999999−67 | |
{{nts|-20345678901234567.12345678|debug=yes}} |
!−20,345,678,901,234,570.00000000 | |
{{nts|123.456e3|debug=yes}} |
&10000000000123456000000123,456 | |
{{nts|123.456e2|debug=yes}} |
&1000000000001234560000012,345.6 | |
{{nts|20345678901234567.12345678|debug=yes}} |
~20,345,678,901,234,570.00000000 | |
{{nts|100345678901234567.12345678|debug=yes}} |
~100,345,678,901,234,560.00000000 | |
{{nts|1234567890123456.12345678|debug=yes}} |
&112345678901235000000001,234,567,890,123,456.00000000 | |
{{nts|234567890123456.12345678|debug=yes}} |
&10234567890123460031250234,567,890,123,456.12000000 | |
{{nts|34567890123456.12345678|debug=yes}} |
&1003456789012345600000034,567,890,123,456.12500000 | |
{{nts|4567890123456.12345678|debug=yes}} |
&100045678901234560996094,567,890,123,456.12300000 | |
{{nts|567890123456.12345678|debug=yes}} |
&10000567890123456119995567,890,123,456.12340000 | |
{{nts|67890123456.12345678|debug=yes}} |
&1000006789012345612300167,890,123,456.12346000 | |
{{nts|7890123456.12345678|debug=yes}} |
&100000078901234561234997,890,123,456.12345700 | |
{{nts|890123456.12345678|debug=yes}} |
&10000000890123456123460890,123,456.12345680 | |
{{nts|90123456.12345678|debug=yes}} |
&1000000009012345612345690,123,456.12345678 | |
{{nts|0123456.12345678|debug=yes}} |
&100000000001234561234560,123,456.12345678 | |
{{nts|123456.12345678|debug=yes}} |
&10000000000123456123456123,456.12345678 | |
{{nts|23456.12345678|debug=yes}} |
&1000000000002345612345623,456.12345678 | |
{{nts|3456.12345678|debug=yes}} |
&100000000000034561234563,456.12345678 | |
{{nts|456.12345678|debug=yes}} |
&10000000000000456123456456.12345678 | |
{{nts|56.12345678|debug=yes}} |
&1000000000000005612345656.12345678 | |
{{nts|6.12345678|debug=yes}} |
&100000000000000061234566.12345678 | |
{{nts|.12345678|debug=yes}} |
&10000000000000000123456.12345678 | |
{{nts|0.12345678|debug=yes}} |
&100000000000000001234560.12345678 | |
{{nts|0.02345678|debug=yes}} |
&100000000000000000234560.02345678 | |
{{nts|0.00345678|debug=yes}} |
&100000000000000000034560.00345678 | |
{{nts|0.00045678|debug=yes}} |
&100000000000000000004560.00045678 | |
{{nts|0.00005678|debug=yes}} |
&100000000000000000000560.00005678 | |
{{nts|0.00000678|debug=yes}} |
&100000000000000000000060.00000678 | |
{{nts|0.00000078|debug=yes}} |
&100000000000000000000000.00000078 | |
{{nts|0.00000008|debug=yes}} |
&100000000000000000000000.00000008 | |
{{nts|.00000008|debug=yes}} |
&10000000000000000000000.00000008 | |
{{nts|0|debug=yes}} |
&100000000000000000000000 |
See also
- {{Ntsh}} – same as this template, but does not display (hides) the number
- {{Ntsc}} – for converted units, sorts by the first number
- {{Ntss}} – same as Nts, but allows for the number to be scaled
- {{Convert}} – has a sortable option
- {{Dts}} – for sorting dates
- {{Sms}} – used to generate any hidden sort key