Attached is a converter to spell a number in Spanish. This is from an Access routine written in VB.
?currency_to_spanish(1122344.55)
= "un millon ciento veintedos mil trescientos cuarta y cuatro con 55/100"
Bill.
Code:
'Date Created: 13-Jan-2008 12:01:34 AM 'Last Updated: 17-Jan-2008 01:28:12 PM 'Created By : Bill Parker 'Updated By : Bill Parker FUNCTION currency_to_spanish AS C (number AS N ) 'DESCRIPTION:Convert a money field to words for printing on a check. 'original code written by Joe Foster to output English text in MS Access. 'output always includes xx/100, except where number = 0. 'handles negatives and numbers to trillions. 'some comments are from the original VB code, some are the English of what is now Spanish. N = number 'Function English (ByVal N As Currency) As String Constant Thousand = 1000 Constant Million = Thousand * Thousand Constant Billion = Thousand * Million Constant Trillion = Thousand * Billion If N = 0 currency_to_spanish = "cero" '"zero" Exit Function end if Dim Buf As C 'String If N < 0 Buf = "negativo " '"negative " Else Buf = "" end if Dim Frac As N 'Currency: Frac = Abs(N - int(N)) Frac = round(Frac,2) If N < 0 .Or. Frac <> 0 N = Abs(int(N)) end if Dim AtLeastOne As L=.f. 'Integer: if N >= 1 AtLeastOne = .t. end if If (N >= Trillion) Then prefix = DigitGroup(Int(N / Trillion)) if prefix = "uno" then; prefix = "un"; end if 'Spanish idiom Buf = Buf + prefix + " trillon" '" trillion" N = N - Int(N / Trillion) * Trillion ' Mod overflows in Access If N >= 1 Buf = Buf + " " end if End If If (N >= Billion) Then prefix = DigitGroup(Int(N / Billion)) if prefix = "uno" then; prefix = "un"; end if 'Spanish idiom Buf = Buf + prefix + " billon" '" billion" N = N - Int(N / Billion) * Billion ' Mod still overflows If (N >= 1) Then Buf = Buf + " " end if End If If (N >= Million) Then prefix = DigitGroup(N / Million) if prefix = "uno" then; prefix = "un"; end if 'Spanish idiom Buf = Buf + prefix + " millon" '" million" N = mod(N, Million) If (N >= 1) Then Buf = Buf + " " end if End If If (N >= Thousand) Then prefix = DigitGroup(N / Thousand) if prefix = "uno" then; prefix = "un"; end if 'Spanish idiom Buf = Buf + prefix + " mil" '" thousand" N = mod(N, Thousand) If (N >= 1) Then Buf = Buf + " " end if End If If (N >= 1) Then lessthan1000 = DigitGroup(N) if lessthan1000 = "ciento" then; lessthan1000 = "cien"; end if 'Spanish idiom Buf = Buf + lessthan1000 End If If (Frac = 0) Then Buf = Buf + " con 00/100" '" exactly" ElseIf (Int(Frac * 100) = Frac * 100) Then If AtLeastOne Then Buf = Buf + " con " '" and " Buf = Buf + right("00" +alltrim(str(Frac*100)),2) +"/100" 'Format$(Frac * 100, "00") + "/100" end if Else If AtLeastOne Then Buf = Buf + " and " Buf = Buf + Format$(Frac * 10000, "0000") + "/10000" end if End If currency_to_spanish = Buf End Function '------------------------------------------------------------------------ Function DigitGroup as C (N As N) Constant Hundred = "cientos" '(add exception for 100 in calling routine) Constant One = "uno" Constant Two = "dos" Constant Three = "tres" Constant Four = "cuatro" Constant Five = "cinco" Constant Six = "seis" Constant Seven = "siete" Constant Eight = "ocho" Constant Nine = "nueve" Dim Buf As C = "" 'String: Buf = "" Dim Flag As L = .f. 'Integer: Flag = False 'Do hundreds 'there are three exceptions in Spanish int_N = int(N / 100) Select Case int_N = 0; Buf = ""; Flag = .F. Case int_N = 1; Buf = "ciento"; Flag = .T. 'One + Hundred; Flag = .T. Case int_N = 2; Buf = Two + Hundred; Flag = .T. Case int_N = 3; Buf = Three + Hundred; Flag = .T. Case int_N = 4; Buf = Four + Hundred; Flag = .T. Case int_N = 5; Buf = "quinientos"; Flag = .T. 'Five + Hundred; Flag = .T. Case int_N = 6; Buf = Six + Hundred; Flag = .T. Case int_N = 7; Buf = Seven + Hundred; Flag = .T. Case int_N = 8; Buf = Eight + Hundred; Flag = .T. Case int_N = 9; Buf = "novecientos"; Flag = .T. 'Nine + Hundred; Flag = .T. End Select If (Flag <> .F.) Then N = mod(N,100) end if If (N > 0) Then If (Flag <> .F.) Then; Buf = Buf + " ";end if Else DigitGroup = Buf Exit Function End If 'Do tens (except teens) int_N = int(N / 10) Select Case int_N = 0; Flag = .F. Case int_N = 1; Flag = .F. Case int_N = 2; Buf = Buf + "veinte"; Flag = .T. '"twenty"; Flag = .T. Case int_N = 3; Buf = Buf + "treinta"; Flag = .T. '"thirty"; Flag = .T. Case int_N = 4; Buf = Buf + "cuarta"; Flag = .T. '"forty"; Flag = .T. Case int_N = 5; Buf = Buf + "cincuenta"; Flag = .T. '"fifty"; Flag = .T. Case int_N = 6; Buf = Buf + "sesenta"; Flag = .T. '"sixty"; Flag = .T. Case int_N = 7; Buf = Buf + "seteta"; Flag = .T. '"seventy"; Flag = .T. Case int_N = 8; Buf = Buf + "ochenta"; Flag = .T. '"eighty"; Flag = .T. Case int_N = 9; Buf = Buf + "noventa"; Flag = .T. '"ninety"; Flag = .T. End Select If (Flag <> .F.) Then N = mod(N,10) end if If (N > 0) Then 'If (Flag <> .F.) Then; Buf = Buf + "-";end if If (Flag <> .F.) Then if word(Buf,-1) = "veinte" ' Spanish idiom 'add nothing in this case, e.g. veinteuno else Buf = Buf + " y " end if end if Else DigitGroup = Buf Exit Function End If 'Do ones and teens int_N = int(N) Select Case int_N = 0; ' do nothing Case int_N = 1; Buf = Buf + One Case int_N = 2; Buf = Buf + Two Case int_N = 3; Buf = Buf + Three Case int_N = 4; Buf = Buf + Four Case int_N = 5; Buf = Buf + Five Case int_N = 6; Buf = Buf + Six Case int_N = 7; Buf = Buf + Seven Case int_N = 8; Buf = Buf + Eight Case int_N = 9; Buf = Buf + Nine Case int_N = 10; Buf = Buf + "diez" '"ten" Case int_N = 11; Buf = Buf + "once" '"eleven" Case int_N = 12; Buf = Buf + "doce" '"twelve" Case int_N = 13; Buf = Buf + "trece" '"thirteen" Case int_N = 14; Buf = Buf + "catorce" '"fourteen" Case int_N = 15; Buf = Buf + "quince" '"fifteen" Case int_N = 16; Buf = Buf + "dieciseis" '"sixteen" Case int_N = 17; Buf = Buf + "diecisiete" '"seventeen" Case int_N = 18; Buf = Buf + "dieciocho" '"eighteen" Case int_N = 19; Buf = Buf + "diecinueve" '"nineteen" End Select DigitGroup = Buf End Function
= "un millon ciento veintedos mil trescientos cuarta y cuatro con 55/100"
Bill.
Comment