1

I have two fields. I need to be able to convert a number to text.

  • Client_Value__c
  • Client_Value_text__c

I found the following code, but dont know how/where to put the api names in the code. Any idea or tutorials available? Is this class the only thing I need? or will I need a trigger?

public class NumberToWord  {  
      static String[] to_19 = new string[]{ 'zero', 'one',  'two', 'three', 'four',  'five',  'six',  
      'seven', 'eight', 'nine', 'ten',  'eleven', 'twelve', 'thirteen',  
      'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen' };  
    static String[] tens = new string[]{ 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'};  
    static String[] denom = new string[]{ '',  
      'thousand',   'million',     'billion',    'trillion',    'quadrillion',  
      'quintillion', 's!xtillion',   'septillion',  'octillion',   'nonillion',  
      'decillion',  'undecillion',   'duodecillion', 'tredecillion',  'quattuordecillion',  
      's!xdecillion', 'septendecillion', 'octodecillion', 'novemdecillion', 'vigintillion' };  
    // convert a value < 100 to English.    
   public static String convert_nn(integer val) {  
      if (val < 20)  
        return to_19[val];  
      if(val == 100)  
          return 'One Hundred';  
      for (integer v = 0; v < tens.size(); v++) {  
        String dcap = tens[v];  
        integer dval = 20 + 10 * v;  
        if (dval + 10 > val) {  
          if (Math.Mod(val,10) != 0)  
            return dcap + ' ' + to_19[Math.Mod(val,10)];  
          return dcap;  
        }      
      }  
      return 'Should never get here, less than 100 failure';  
    }  
    // convert a value < 1000 to english, special cased because it is the level that kicks   
    // off the < 100 special case. The rest are more general. This also allows you to  
    // get strings in the form of "forty-five hundred" if called directly.  
    public static String convert_nnn(integer val) {  
      String word = '';  
      integer rem = val / 100;  
      integer mod = Math.mod(val,100);  
      if (rem > 0) {  
        word = to_19[rem] + ' hundred';  
        if (mod > 0) {  
          word += ' ';  
        }  
      }  
      if (mod > 0) {  
        word += convert_nn(mod);  
      }  
      return word;  
    }  
    public static String english_number(long val) {  
      if (val < 100) {  
        return convert_nn(val.intValue());  
      }  
      if (val < 1000) {  
        return convert_nnn(val.intValue());  
      }  
      for (integer v = 0; v < denom.size(); v++) {  
        integer didx = v - 1;  
        integer dval = (integer)Math.pow(1000, v);  
        if (dval > val) {  
          integer mod = (integer)Math.pow(1000, didx);  
          integer l = (integer) val / mod;  
          integer r = (integer) val - (l * mod);  
          String ret = convert_nnn(l) + ' ' + denom[didx];  
          if (r > 0) {  
            ret += ', ' + english_number(r);  
          }  
          return ret;  
        }  
      }  
      return 'Should never get here, bottomed out in english_number';  
    }  
  }
  • 1
    This is an Apex class that other Apex can call. You would have to integrate it into your own automation processes, such as triggers, or wrap it in Invocable Apex to use it from Process Builder. What are the details of what you are trying to do? – David Reed Jan 31 at 15:20
  • +1 for protecting our sensibilities with 's!xtillion' – cropredy Jan 31 at 19:21
2

You would need a trigger, which you can call this code from:

trigger X on Y (before insert, before update) {
  for(Y record: Trigger.new) {
    if(record.Client_Value__c != null && record.Client_Value__c >= 0) {
      record.Client_Value_Text__c = NumberToWord.convert_nn(record.Client_Value__c.intValue());
    }
  }
}
  • Getting 3 errors: 1. Comparison arguments must be compatible types: Schema.SObjectField, Integer 2. Variable does not exist: NumberToWord 3. A value cannot be stored to Client_Value_Text__c in type Contract__c – HUBBY0716 Jan 31 at 16:08
  • 1
    @HUBBY0716 There was a type conversion problem; the edit should fix that for you. Everything else you'll need to fix. – sfdcfox Jan 31 at 17:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.