Manage Learn to apply best practices and optimize your operations.

Convert number value to text string (R5 and earlier)

This code will convert a number value to a text string.

This code will convert a number value to a text string.

Simply paste this code in a "Computed" field and replace "number" in the setup area to the field you want to convert. This is an international version that is compatible with any language using the "hundreds tens ones" ("nine hundred ninety nine")format for specifying numbers. The code is REMed for locations to get the wording correct, including international separators for the divisions and decimal and whether the number should be treated as currency or the decimals should be text ("ninety nine cents") or a fraction ("99/100 dollars").

It's current limitation is 999,999,999, but that can be extended to include larger numbers by copying a division, adding it to the end of the code and then adding the new division's text value to the "divs" variable.

A huge thanks goes to Jason Horton for testing and suggesting improvements.

  
  Code: REM "***** Setup *****";
numfield := @Text(number);
intlcurrency := " dollars"; REM "the currency to use";
intlformat := " ";     REM "the text separater 
between hundreds and tens";
intlnumsep := "and ";  
REM "the text separater between whole and 
decimal numbers";
intlnumCtxt := " hundred "; 
REM "the text value of hundred for each 
division";
intldivsep := ",";    REM "the numeric separator 
between divisions of numbers";
intldecsep := ".";    REM "the numeric separator 
between whole and decimal numbers";
intldectxt := " cents";   
REM "the text for decimal currency (" 
pence"; "/100"; ...)";
iscurrency := @True;  
REM "whether the number should be currency 
(@True; @False)";
isdectxt := @True;   
REM "whether the decimals should be 
text or numeric (@True; @False)";
divs := ", thousand, million, billion";
single := ",one,two,three,four,five,six,seven,eight,nine";
double := 
"eleven,twelve,thirteen,fourteen,
fifteen,sixteen,seventeen,eighteen,ni
neteen";
tens := "ten,twenty,thirty,forty,
fifty,sixty,seventy,eighty,ninety";

REM "***** Code Preparation *****";
@If(numfield = ""; @Return(""); "");
fullnum := @Explode(numfield; 
intldecsep); thisnum := @Subset(fullnum; 1); 
thisdec := @If(@Elements
(fullnum) > 1; @Subset(fullnum; -1); ""); @If
(@IsNumber(thisnum); ""; 
@TextToNumber(number)); a := 
@Implode(@Explode(@Text
(thisnum; "F0"); intldivsep); ""); b := 
@Length(a); divcount := 1; ishundred := 
b > 2; isthousand := b > 3; 
ishthousand := b > 5; ismillion := b > 
6; ishmillion := b > 8; isbillion := b > 9;

REM "***** Start of Decimals *****";
hasdecimal := !(thisdec = "");
txtval := @If(hasdecimal; 
@Left(thisdec + "0"; 2); ""); numval := @If
(hasdecimal; @TextToNumber(txtval); ""); 
oneval := @If(hasdecimal; @TextToNumber
(@Right(txtval; 1)); ""); tenval := 
@If(hasdecimal; @TextToNumber(@Left(txtval; 
1)); ""); newstring := @If(hasdecimal;
 @If(isdectxt;
  @If(numval > 19; 
@Word(tens; ","; tenval) + " " + @Word
(single; ","; oneval + 1);
   numval > 10; @Word(double; ","; oneval);
   numval = 10; @Word(tens; ","; 1);
   @Word(single; ","; oneval + 1)
   );
  txtval)
   + @If(numval = 0; ""; intldectxt);
 "");
numstring := @If(hasdecimal 
& numval > 0; intlnumsep; "") + newstring + @If
(isdectxt; ""; intlcurrency);

REM "***** Start of Hundreds *****";
@Set("txtval"; @Right("0" + a; 2));
@Set("numval"; @TextToNumber(txtval));
@Set("oneval"; @TextToNumber
(@Right(txtval; 1))); @Set("tenval"; 
@TextToNumber
(@Left(txtval; 1)));

@Set("newstring"; @If(numval > 19; 
@Word(tens; ","; tenval) + " " + @Word
(single; ","; oneval + 1);
 numval > 10; @Word(double; ","; oneval);
 numval = 10; @Word(tens; ","; 1);
 @Word(single; ","; oneval + 1)
 )
 + @Word(divs; ","; divcount));
@Set("numstring"; newstring + 
@If(iscurrency & isdectxt; intlcurrency; "") 
+ " " + numstring); 
@If(b > ((divcount *3) - 1); 
@Set("numstring"; 
intlformat + numstring); 
@Return(@Trim(numstring)));

@Set("a"; @Left(a; @Length(a) - 2));
@Set("txtval"; @Right(a; 1));
@Set("oneval"; @TextToNumber(txtval));
@Set("newstring"; @If(oneval = 0; ""; 
@Word(single; ","; oneval + 1) + 
intlnumCtxt)); @Set("numstring"; 
newstring + " " + numstring); @If(b > 
(divcount *3); ""; @Return(@Trim(numstring)));

REM "***** Start of Thousands *****";
@Set("divcount"; divcount + 1);
@Set("a"; @Left(a; @Length(a) -1));
@Set("txtval"; @Right("0" + a; 2));
@Set("numval"; @TextToNumber(txtval));
@Set("oneval"; @TextToNumber
(@Right(txtval; 1))); @Set("tenval"; @TextToNumber
(@Left(txtval; 1)));

@Set("newstring";
 @If(numval > 19; 
@Word(tens; ","; tenval) + " " + @Word(single; ","; 
oneval + 1);
  numval > 10; @Word(double; ","; oneval);
  numval = 10; @Word(tens; ","; 1);
  @Word(single; ","; oneval + 1)
  )
  + @Word(divs; ","; divcount)
 );
@Set("numstring"; 
newstring + " " + numstring); 
@If(b > ((divcount *3) - 1); 
@Set("numstring"; intlformat + 
numstring); @Return(@Trim(numstring)));

@Set("a"; @Left(a; @Length(a) - 2));
@Set("txtval"; @Right(a; 1));
@Set("oneval"; @TextToNumber(txtval));
@Set("newstring"; @If(oneval = 0; ""; 
@Word(single; ","; oneval + 1) + 
intlnumCtxt)); @Set("numstring"; 
newstring + " " + numstring); @If(b > 
(divcount *3); ""; @Return(@Trim(numstring)));

REM "***** Start of Millions *****";
@Set("divcount"; divcount + 1);
@Set("a"; @Left(a; @Length(a) -1));
@Set("txtval"; @Right("0" + a; 2));
@Set("numval"; @TextToNumber(txtval));
@Set("oneval"; @TextToNumber
(@Right(txtval; 1))); @Set("tenval"; @TextToNumber
(@Left(txtval; 1)));

@Set("newstring";
 @If(numval > 19; 
@Word(tens; ","; tenval) + " " + @Word(single; ","; 
oneval + 1);
  numval > 10; @Word(double; ","; oneval);
  numval = 10; @Word(tens; ","; 1);
  @Word(single; ","; oneval + 1))
  + @Word(divs; ","; divcount)
 );
@Set("numstring"; newstring + " " + 
numstring); @If(b > ((divcount *3) - 1); 
@Set("numstring"; intlformat + numstring); 
@Return(@Trim(numstring)));

@Set("a"; @Left(a; @Length(a) - 2));
@Set("txtval"; @Right(a; 1));
@Set("oneval"; @TextToNumber(txtval));
@Set("newstring"; @If(oneval = 0; ""; 
@Word(single; ","; oneval + 1) + 
intlnumCtxt)); @Set("numstring"; newstring
 + " " + numstring); @If(b > 
(divcount *3); ""; @Return
(@Trim(numstring)));

REM "***** Start of Billions *****";
@Set("divcount"; divcount + 1);
"Over 999,999,999"

Do you have comments on this tip? Let us know.

This tip was submitted to the SearchDomino.com tip exchange by member Robert Albritton. Please let others know how useful it is via the rating scale below. Do you have a useful Notes/Domino tip or code to share? Submit it to our monthly tip contest and you could win a prize and a spot in our Hall of Fame.

This was last published in January 2005

Dig Deeper on Lotus Domino Server 5

Start the conversation

Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.

-ADS BY GOOGLE

SearchWindowsServer

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchDataCenter

SearchExchange

SearchContentManagement

Close