| "The string representation of the given [[integer]] in the |
| base given by [[radix]]. If the given integer is |
| [[negative|Integer.negative]], the string representation |
| will begin with `-`. Digits consist of decimal digits `0` |
| to `9`, together with and lowercase letters `a` to `z` for |
| bases greater than 10. |
| |
| For example: |
| |
| - `formatInteger(-46)` is `\"-46\"` |
| - `formatInteger(9,2)` is `\"1001\"` |
| - `formatInteger(10,8)` is `\"12\"` |
| - `formatInteger(511,16)` is `\"1ff\"` |
| - `formatInteger(512,32)` is `\"g0\"`" |
| throws (`class AssertionError`, |
| "if [[radix]] is not between [[minRadix]] and |
| [[maxRadix]]") |
| see (`function Integer.format`) |
| tagged("Numbers") |
| deprecated("Use [[Integer.format]]") |
| shared String formatInteger( |
| "The integer value to format." |
| Integer integer, |
| "The base, between [[minRadix]] and [[maxRadix]] |
| inclusive." |
| Integer radix = 10, |
| "If not `null`, `groupingSeparator` will be used to |
| separate each group of three digits if `radix` is 10, |
| or each group of four digits if `radix` is 2 or 16. |
| |
| `groupingSeparator` may not be '-', a digit as |
| defined by the Unicode general category *Nd*, or a |
| letter as defined by the Unicode general categories |
| *Lu, Ll, Lt, Lm, and Lo*." |
| Character? groupingSeparator = null) { |
| |
| assert (minRadix <= radix <= maxRadix); |
| |
| if (exists groupingSeparator) { |
| "groupingSeparator may not be '-', a digit, or a letter." |
| assert (!groupingSeparator.digit |
| && !groupingSeparator.letter |
| && !groupingSeparator == '-'); |
| } |
| |
| if (integer == 0) { |
| return "0"; |
| } |
| |
| value groupingSize = |
| if (!groupingSeparator exists) |
| then 0 |
| else if (radix == 10) |
| then 3 |
| else if (radix == 2 || radix == 16) |
| then 4 |
| else 0; |
| |
| value groupingChar = |
| if (exists groupingSeparator, |
| groupingSize != 0) |
| then groupingSeparator |
| else 'X'; |
| |
| variable value digitNumber = 0; |
| variable {Character*} digits = {}; |
| variable Integer i = integer < 0 |
| then integer |
| else -integer; |
| while (i != 0) { |
| Integer d = -(i % radix); |
| Character c; |
| if (0<=d<10) { |
| c = (d+zeroInt).character; |
| } |
| else if (10<=d<36) { |
| c = (d-10+aIntLower).character; |
| } |
| else { |
| assert (false); |
| } |
| if (groupingSize != 0 |
| && groupingSize.divides(digitNumber++) |
| && digitNumber != 1) { |
| digits = digits.follow(groupingChar); |
| } |
| digits = digits.follow(c); |
| i = (i + d) / radix; |
| } |
| if (integer < 0) { |
| digits = digits.follow('-'); |
| } |
| return String(digits); |
| } |
| |