Code: Alles auswählen
#Number2Word_UpperCase = 1
#Number2Word_MoreAnds = 2
Procedure.s smallNumber(number.s,stelle.s,count)
Define temp.s,length,temp2.s,temp3.s
length=Len(number)
If Length=3
If Left(number,1)<>"0"
temp=StringField("ein|zwei|drei|vier|fünf|sechs|sieben|acht|neun",Val(Left(number,1)),"|")+"hundert"
EndIf
EndIf
temp3=StringField("|ein|zwei|drei|vier|fünf|sechs|sieben|acht|neun",Val(Right(number,1))+1,"|")
If length=1
If (count>1) And (Right(number,1)="1")
ProcedureReturn temp3+"e"
Else
ProcedureReturn temp3
EndIf
EndIf
If Mid(number,Len(number)-1,1)="1"
ProcedureReturn temp+stelle+StringField("zehn|elf|zwölf|dreizehn|vierzehn|fünfzehn|sechzehn|siebzehn|achtzehn|neunzehn",Val(Right(number,1))+1,"|")
EndIf
If length>1
temp2=StringField("||zwanzig|dreißig|vierzig|fünfzig|sechzig|siebzig|achtzig|neunzig",Val(Mid(number,Len(number)-1,1))+1,"|")
If Right(number,1)="0":ProcedureReturn temp+stelle+temp2:EndIf
EndIf
If temp2=""
ProcedureReturn temp+stelle+temp3
Else
ProcedureReturn temp+stelle+temp3+"und"+temp2
EndIf
EndProcedure
Procedure.s Number2Word(number.q,modus)
Define count=0,aktuell.s,word.s,word2.s,zahlstring.s,stelle.s,negativ
If number<0
negativ=1
number=Abs(number)
EndIf
zahlstring=Str(number)
If number=0
word="null"
Else
Repeat
If Len(zahlstring)>2
aktuell=Right(zahlstring,3)
zahlstring=Left(zahlstring,Len(zahlstring)-3)
Else
aktuell=zahlstring
zahlstring=""
EndIf
If aktuell<>"000"
If (count=0) And (modus & #Number2Word_MoreAnds)
If Len(Str(number))>2
If Val(Right(Str(number),2))=0
stelle=""
Else
stelle="und"
EndIf
Else
stelle=""
EndIf
Else
stelle=""
EndIf
word2=smallNumber(aktuell,stelle,count)+StringField("|tausend|million|milliarde|billion|billiarde|trillion|trilliarde|quadrillion|quadrilliarde|pentillion|pentilliarde|sextillion|sextilliarde|septillion|septilliarde|oktillion|oktilliarde|nonillion|nonilliarde|dezilion|dezilliarde",count+1,"|")
If (count>1) And (Val(aktuell)>1):If Right(word2,1)<>"e":word2+"e":EndIf:word2+"n":EndIf
word=word2+word
EndIf
count+1
Until zahlstring=""
EndIf
If (number=1) Or Right(Str(number),2)="01":word+"s":EndIf
If negativ:word="minus"+word:EndIf
If (modus & #Number2Word_UpperCase):word=UCase(Left(word,1))+Right(word,Len(word)-1):EndIf
ProcedureReturn word
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Debug Number2Word(1,#Number2Word_UpperCase | #Number2Word_MoreAnds)
Debug Number2Word(-6001,0)
Debug Number2Word(9000012,#Number2Word_MoreAnds)
Debug Number2Word(70,#Number2Word_UpperCase)
Debug Number2Word(286432975416,#Number2Word_MoreAnds)
Debug Number2Word( 12, 0)
Debug Number2Word( 27, 0)
Debug Number2Word( 12027, 0)
Debug Number2Word(286, #Number2Word_MoreAnds)
CompilerEndIf