toWord method
Converts a given number to a spelled out version of itself.
Implementation
@override
String toWord(num number) {
if (number == 0) return "zero";
if (number > maxNumber) {
throw TooLargeNumberException(number, maxNumber);
}
number = removeDecimalZeros(number);
if (hasComma(number)) {
Tuple2<num, num?> numParts = splitByComma(number);
String partOne = toWord(numParts.item1);
String partTwo = toWord(numParts.item2!);
late String endPart;
switch (partTwo.toString().length) {
case 1:
endPart = " tenth";
break;
case 2:
endPart = " hundredth";
break;
case 3:
endPart = " thousandth";
break;
case 4:
endPart = addHyphens ? " ten-thousandth" : " ten thousandth";
break;
case 5:
endPart = addHyphens ? " hundred-thousandth" : " hundred thousandth";
break;
case 6:
endPart = " millionth";
break;
case 7:
endPart = addHyphens ? " ten-millionth" : " ten millionth";
break;
case 8:
endPart = addHyphens ? " hundred-millionths" : " hundred millionths";
break;
case 9:
endPart = " billionth";
break;
case 10:
endPart = addHyphens ? " ten-billionths" : " ten billionths";
break;
case 11:
endPart = addHyphens ? " hundred-billionth" : " hundred billionth";
break;
case 12:
endPart = " trillionth";
break;
case 13:
endPart = addHyphens ? " ten-trillionth" : " ten trillionth";
break;
// case 14:
// endPart = addHyphens ? " hundred-trillionth" : " hundred trillionth";
// break;
// case 15:
// endPart = " quadrillionth";
// break;
// case 16:
// endPart = addHyphens ? " ten-quadrillionth" : " ten quadrillionth";
// break;
// case 17:
// endPart =
// addHyphens ? " hundred-quadrillionth" : " hundred quadrillionth";
// break;
// case 18:
// endPart = " quintillionth";
// break;
// case 19:
// endPart = addHyphens ? " ten-quintillionth" : " ten quintillionth";
// break;
// case 20:
// endPart =
// addHyphens ? " hundred-quintillionth" : " hundred quintillionth";
// break;
// case 21:
// endPart = " sextillionth";
// break;
// case 22:
// endPart = addHyphens ? " ten-sextillionth" : " ten sextillionth";
// break;
// case 23:
// endPart =
// addHyphens ? " hundred-sextillionth" : " hundred sextillionth";
// break;
// case 24:
// endPart = " septillionth";
// break;
// case 25:
// endPart = addHyphens ? " ten-septillionth" : " ten septillionth";
// break;
// case 26:
// endPart =
// addHyphens ? " hundred-septillionth" : " hundred septillionth";
// break;
// case 27:
// endPart = " octillionth";
// break;
// case 28:
// endPart = addHyphens ? " ten-octillionth" : " ten octillionth";
// break;
// case 29:
// endPart =
// addHyphens ? " hundred-octillionth" : " hundred octillionth";
// break;
// case 30:
// endPart = " nonillionth";
// break;
// case 31:
// endPart = addHyphens ? " ten-nonillionth" : " ten nonillionth";
// break;
// case 32:
// endPart =
// addHyphens ? " hundred-nonillionth" : " hundred nonillionth";
// break;
// case 33:
// endPart = " decillionth";
// break;
// case 34:
// endPart = addHyphens ? " ten-decillionth" : " ten decillionth";
// break;
// case 35:
// endPart =
// addHyphens ? " hundred-decillionth" : " hundred decillionth";
// break;
default:
throw TooManyDecimalValues(
number,
partTwo.toString().length,
maxDecimals,
);
}
return partTwo == "one"
? partOne + " and " + partTwo + endPart
: partOne + " and " + partTwo + endPart + "s";
}
num _number = number.abs();
List<String> words = [];
List<num> groups =
format.format(_number).split(",").map((e) => num.parse(e)).toList();
List<num> groups_ = groups.reversed.toList();
for (int i = 0; i < groups_.length; i++) {
words.add(i == 0 ? _thousand(groups_[i]) : _more(groups_[i], i));
}
String word = words.reversed.join(" ");
return number < 0 ? "minus " + word : word;
}