Wednesday, August 18, 2010

Money in Word function with Powerbuilder

Usually, we must write down the value of money in Invoice Document, to prevent user to cheat the value. Let say, US$ 99,80 will write as Ninety Nine Dollar and Eighty Cent.

This is the function script to write the money value in string.


First, we create f_translate function below. The function has a variable to pass called iNilai with Integer as data type. iNilai will represent the value of number that will return in word. So, the function will return a variable in string. This function will called at the main function.

1:  string aSatuan[19], str, aPuluhan[9]  
2:  integer nRatus, nPuluh  
3:    
4:  aSatuan = { "one", "two", "three", "four", "five", &  
5:        "six", "seven", "eight", "nine", "ten", &  
6:        "eleven", "twelve", "thirteen", "forteen", &  
7:        "fifteen", "sixteen", "seventeen", "eighteen", &  
8:        "nineteen" }  
9:    
10:  aPuluhan = { "ten", "twenty", "thirty", "forty", "fifty", &  
11:         "sixty", "seventy", "eighty", "ninety"}  
12:            
13:  IF nilai >= 100 THEN  
14:       nRatus = Integer(String(nilai/100))  
15:       IF nRatus = 1 THEN  
16:            str += "one hundred"  
17:       ELSE  
18:            str += aSatuan[nRatus] + " hundreds"  
19:       END IF  
20:    
21:       IF nilai > 0 THEN nilai -= nRatus * 100  
22:  END IF  
23:    
24:  IF nilai >= 20 THEN  
25:       nPuluh = Integer(String(nilai/10))  
26:       IF nRatus > 0 THEN  
27:            str += " and " + aPuluhan[nPuluh]  
28:       ELSE  
29:            str += aPuluhan[nPuluh]  
30:       END IF  
31:    
32:       nilai -= nPuluh * 10  
33:    
34:       IF nilai > 0 THEN str += " " + aSatuan[nilai]  
35:  ELSE  
36:       IF nilai > 0 THEN  
37:            IF nRatus > 0 THEN  
38:                 str += " and " + aSatuan[nilai]  
39:            ELSE  
40:                 str += aSatuan[nilai]  
41:            END IF  
42:       END IF  
43:  END IF    
44:             
45:  RETURN str  


The main function is called f_moneystr with amount as a decimal variable to pass.

1:  string str  
2:  decimal nMilyar, nJuta, nRibu  
3:    
4:  IF amount < 0 THEN RETURN ""  
5:  IF amount < 1 THEN str = "zero"  
6:    
7:  IF amount >= 1000000000000.00 THEN  
8:       nMilyar = Integer(String(amount/1000000000000.00))  
9:       str += f_Translate(nMilyar) + " trillion "  
10:       amount -= (nMilyar * 1000000000000.00)  
11:  END IF  
12:    
13:  IF amount >= 1000000000 THEN  
14:       nMilyar = Integer(String(amount/1000000000))  
15:       IF nMilyar = 1 THEN  
16:            str += "one billion "  
17:       ELSE  
18:            str += f_Translate(nMilyar) + " billion "  
19:       END IF  
20:       amount -= (nMilyar * 1000000000)  
21:  END IF  
22:    
23:  IF amount >= 1000000 THEN  
24:       nJuta = Integer(String(amount/1000000))  
25:       IF nJuta = 1 THEN  
26:            str += "one million "  
27:       ELSE  
28:            str += f_Translate(nJuta) + " millions "  
29:       END IF  
30:       amount -= (nJuta * 1000000)  
31:  END IF  
32:    
33:  IF amount >= 1000 THEN  
34:       nRibu = Integer(String(amount/1000))  
35:       IF nRibu = 1 THEN  
36:            str += "one thousand "  
37:       ELSE  
38:            str += f_Translate(nRibu) + " thousands "  
39:       END IF  
40:       amount -= (nRibu * 1000)  
41:  END IF  
42:    
43:  str += f_Translate(Integer(String(amount)))  
44:  str = RightTrim(str) + " US Dollar"  
45:  amount -= Integer(String(amount))  
46:    
47:  IF amount > 0 THEN  
48:       amount *= 100  
49:       str += " and " + f_Translate(amount) + " cent"  
50:  END IF  
51:      
52:  return str  


To use this function, just call with this statement:

1:  string sMoney  
2:    
3:  sMoney = f_moneystr(99.80)  

Note: Thanks to Mr. AGP for the script :)

No comments:

Post a Comment