Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public with sharing class ConvertNumberToText {
- public ConvertNumberToText() {
- }
- private static final List<String> tensNames = new List<String>{
- '',
- ' ten',
- ' twenty',
- ' thirty',
- ' forty',
- ' fifty',
- ' sixty',
- ' seventy',
- ' eighty',
- ' ninety'
- };
- private static final List<String> numNames = new List<String>{
- '',
- ' one',
- ' two',
- ' three',
- ' four',
- ' five',
- ' six',
- ' seven',
- ' eight',
- ' nine',
- ' ten',
- ' eleven',
- ' twelve',
- ' thirteen',
- ' fourteen',
- ' fifteen',
- ' sixteen',
- ' seventeen',
- ' eighteen',
- ' nineteen'
- };
- private static String convertLessThanOneThousand(Integer numberValue) {
- String soFar;
- if (Math.mod(numberValue, 100) < 20) {
- soFar = numNames[Math.mod(numberValue, 100)];
- numberValue = numberValue / 100;
- } else {
- soFar = numNames[Math.mod(numberValue, 10)];
- numberValue = numberValue / 10;
- soFar = tensNames[Math.mod(numberValue, 10)] + soFar;
- numberValue = numberValue / 10;
- }
- if (numberValue == 0)
- return soFar;
- return numNames[numberValue] + ' hundred' + soFar;
- }
- public static String convert(Long numberValue) {
- // 0 to 999 999 999 999
- if (numberValue == 0) {
- return 'zero';
- }
- String snumber = String.valueOf(numberValue);
- // Pad with "0"
- String mask = '000000000000';
- while (snumber.length() < mask.length()) {
- snumber = '0' + snumber;
- }
- // XXXnnnnnnnnn
- Integer billions = Integer.valueOf(snumber.substring(0, 3));
- // nnnXXXnnnnnn
- Integer millions = Integer.valueOf(snumber.substring(3, 6));
- // nnnnnnXXXnnn
- Integer hundredThousands = Integer.valueOf(snumber.substring(6, 9));
- // nnnnnnnnnXXX
- Integer thousands = Integer.valueOf(snumber.substring(9, 12));
- String tradBillions;
- switch on (billions) {
- when 0 {
- tradBillions = '';
- }
- when 1 {
- tradBillions =
- convertLessThanOneThousand(billions) + ' billion ';
- }
- when else {
- tradBillions =
- convertLessThanOneThousand(billions) + ' billion ';
- }
- }
- String result = tradBillions;
- String tradMillions;
- switch on (millions) {
- when 0 {
- tradMillions = '';
- }
- when 1 {
- tradMillions =
- convertLessThanOneThousand(millions) + ' million ';
- }
- when else {
- tradMillions =
- convertLessThanOneThousand(millions) + ' million ';
- }
- }
- result = result + tradMillions;
- String tradHundredThousands;
- switch on (hundredThousands) {
- when 0 {
- tradHundredThousands = '';
- }
- when 1 {
- tradHundredThousands = 'one thousand ';
- }
- when else {
- tradHundredThousands =
- convertLessThanOneThousand(hundredThousands) + ' thousand ';
- }
- }
- result = result + tradHundredThousands;
- String tradThousand;
- tradThousand = convertLessThanOneThousand(thousands);
- result = result + tradThousand;
- // remove extra spaces!
- return result.replaceAll('^\\s+', '').replaceAll('\\b\\s{2,}\\b', ' ');
- }
- /*
- String phrase = '12345.67';
- Decimal num = Decimal.valueOf(phrase);
- Integer dollars = num.intValue();
- Integer cent = Integer.valueOf((num - dollars) * 100);
- String s = '$ ' + ConvertNumberToText.convert(dollars) + ' and '
- + ConvertNumberToText.convert(cent) + ' cents';
- System.debug(s);
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement