"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);
}