Tema: Re: skaiciai i zodzius MS worde
Autorius: Jornada Del Muerto
Data: 2011-10-25 17:50:49

Public Function Zodis(ByVal Suma As Double) As String
    Dim I As Integer, J As Integer, K As Integer, N As Integer, Str As String
    Dim Narys(8) As Integer, Nedesimt As Boolean
    Dim Vienas, Lika, Desimt, Simtas, Tukst, Milion

    Vienas = Array("vienas ", "du ", "trys ", "keturi ", "penki ", "ei ", "septyni ", "atuoni ", "devyni ")
    Lika = Array("vienuolika ", "dvylika ", "trylika ", "keturiolika ", "penkiolika ", "eiolika ", "septyniolika ", "atuoniolika ", "devyniolika ")
    Desimt = Array("deimt ", "dvideimt ", "trisdeimt ", "keturiasdeimt ", "penkiasdeimt ", "eiasdeimt ", "septyniasdeimt ", "atuoniasdeimt ", "devyniasdeimt ")
    Simtas = Array("imtas ", "imtai ")
    Tukst = Array("tkstantis ", "tkstaniai ", "tkstani ")
    Milion = Array("milijonas ", "milijonai ", "milijonu ")
    Str = CStr(Int(Abs(Suma)))
    N = Len(Str)

    If N < 10 Then
        For I = N To 1 Step -1
            Narys(N - I) = Mid(Str, I, 1)
        Next I
        If Suma < 0 Then Str = "minus " Else Str = ""
        K = 0
        For J = Int((N - 1) / 3) To 0 Step -1
            Nedesimt = False
            For I = N - 1 - K To J * 3 Step -1
                Select Case I - J * 3
                    Case 2
                        If Narys(I) <> 0 Then
                            Str = Str & Vienas(Narys(I) - 1)
                            If Narys(I) = 1 Then Str = Str & Simtas(0) Else Str = Str & Simtas(1)
                        End If
                    Case 1
                        If Narys(I) = 1 And Narys(I - 1) <> 0 Then
                            Nedesimt = True
                        Else
                            If Narys(I) <> 0 Then Str = Str & Desimt(Narys(I) - 1)
                        End If
                    Case 0
                        If Nedesimt Then
                            Str = Str & Lika(Narys(I) - 1)
                        Else
                            If Narys(I) <> 0 Then Str = Str & Vienas(Narys(I) - 1)
                        End If
                End Select
            Next I
            K = N - J * 3
            Select Case J
                Case 0
                    If Str = "" Or Str = "minus " Then Str = Str & "nulis "
                    Str = Str & "Lt " & Format((Abs(Suma) - Int(Abs(Suma))) * 100, "00") & " ct"
                Case 1
                    If K = 1 Or (Narys(J * 3) <> 0 And Narys(1 + J * 3) <> 1) Then
                        If Narys(J * 3) = 1 Then Str = Str & Tukst(0) Else Str = Str & Tukst(1)
                    Else
                        If Narys(3) + Narys(4) + Narys(5) <> 0 Then Str = Str & Tukst(2)
                    End If
                Case 2
                    If K = 1 Or (Narys(J * 3) <> 0 And Narys(1 + J * 3) <> 1) Then
                        If Narys(J * 3) = 1 Then Str = Str & Milion(0) Else Str = Str & Milion(1)
                    Else
                        Str = Str & Milion(2)
                    End If
            End Select
        Next J
        Zodis = Chr(Asc(Str) - 32) & Right(Str, Len(Str) - 1)
    Else
        Zodis = "Tiek negali buti"
    End If
End Function