Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Presbiopia - la 43 ani ?

Termen transcriere autovehicul

Cazare Timisoara pe 4-5 zile

Primele zile ale internetului per...
 Ditra 25

Casti USB-C ptr A-54

Aplicatie medicala / asistent med...

De ce vor atația politicieni...
 ERR_ADDRESS_UNREACHABLE

Legea 18/1968 Se mai aplica?

Digi conectare 2 routere prin fir

Succesiune notar versus instanta ...
 Montaj aer conditionat in balcon ...

Cont curent mulți valuta far...

Sugestii plan casa

Experiente cu firme care cumpara ...
 

Transformare Numere In Litere

- - - - -
  • Please log in to reply
56 replies to this topic

#37
Mycro

Mycro

    Member

  • Grup: Members
  • Posts: 244
  • Înscris: 10.12.2002
Din pacate e vorba de un chitantier pt asociatia de locatari (am terminat carnetul de chitante) si trebuie sa pun obligatoriu si suma in litere. Am facut restul "chitantierului" dar am ramas blocat la functia asta. In cel mai rau caz, completez manual, ca n-am ce face :(

P.S: Mi-a placut scriptul asta dar din cate stiu nu am cum sa fac din php (daca as avea acces la sursa) macro pt excel.
Attached File  Chitantier.zip   6.77K   240 downloads

#38
Berti

Berti

    233SP09

  • Grup: Senior Members
  • Posts: 3,068
  • Înscris: 02.03.2006
Am facut eu unu complet pentru OP-uri (ordine de plata) da-l am la munca, ramane pe maine...

#39
Berti

Berti

    233SP09

  • Grup: Senior Members
  • Posts: 3,068
  • Înscris: 02.03.2006
Asta-i solutia, din cate tin minte m-am ocupat de toate exceptiile.

exemple de mai sus le rezolva asa:

- 23.43 ->douazecisitreileisipatruzecisitreibani
- 100.01 ->osutaleisiunban
- 99999999.99 -> nouazecisinouamilioanenouasutenouazecisinouamiinouasutenouazecisinoualeisinouaze
cisinouabani (SP nu permite afisearea unui sir de caractere atat de lung)
- 1000000000 -> valoare prea mare

Banuiesc ca nu lucrati cu sume mai mari de atat  :P
Daca totusi se scrie suma asta, pentru un comision de nimic, 0,001% vin s-o scriu personal de mana.

Succes.


Option Explicit
Public Numbers As Variant, Tens As Variant, Sutemii As Variant

Sub SetNr()
Sutemii = Array("zero", "una", "doua", "trei", "patru", "cinci", "sase", "sapte", "opt", "noua")
Numbers = Array("zero", "unu", "doi", "trei", "patru", "cinci", "sase", "sapte", "opt", "noua")
Tens = Array("", "", "douazeci", "treizeci", "patruzeci", "cincizeci", "saizeci", "saptezeci", "optzeci", "nouazeci")

End Sub

Function Litere(MyNumber As Double) As String


Dim DecimalPosition As Integer, ValNo As Variant, StrNo As String, t1 As String, p As String, q As String, r As String

Dim NumStr As String, n As Integer, Temp1 As String, a As String, b As String, c As String, f As String, NumStr1 As String, NumStr2 As String
Dim NumStr3 As String, NumStr4 As String, NumStr5 As String, NumStr6 As String, NumStr7 As String, NumStr8 As String, NumStr9 As String, NumStr10 As String, NumStr11 As String
Dim Virgula
Dim x As String, z As String
Dim Zecimale
Dim Bani

If Abs(MyNumber) > 999999999 Then
Litere = "Valoare prea mare"
Exit Function
End If

SetNr


NumStr = Right("000000000" & Trim(Str(Int(Abs(MyNumber)))), 9)
NumStr1 = Mid(NumStr, 9, 1)
NumStr2 = Mid(NumStr, 8, 1)
NumStr3 = Mid(NumStr, 7, 1)
NumStr4 = Mid(NumStr, 6, 1)
NumStr5 = Mid(NumStr, 5, 1)
NumStr6 = Mid(NumStr, 4, 1)
NumStr7 = Mid(NumStr, 3, 1)
NumStr8 = Mid(NumStr, 2, 1)
NumStr9 = Mid(NumStr, 1, 1)

Zecimale = Trim(Str(MyNumber))

		  
		  Virgula = InStr(Zecimale, ".")
		  
		  If Virgula > 0 Then
			  Bani = Left(Mid(Zecimale, Virgula + 1) & _
			   "00", 2)
		  Else: Bani = "00"
			  
		  End If
		  
NumStr10 = Mid(Bani, 1, 1)
NumStr11 = Mid(Bani, 2, 1)

'Aici incepe partea cu xxx xxx xxx,99


If NumStr10 = 0 And NumStr11 = 1 Then

x = "unban"
z = x
End If

If NumStr10 = 0 And NumStr11 < 10 And NumStr11 > 1 Then
x = Numbers(Left(NumStr11, 1))
z = x & "bani"
End If


If NumStr10 = 1 And NumStr11 = 0 Then
x = "zece"
z = x & "bani"
End If

If NumStr10 = 1 And NumStr11 = 1 Then
x = "unsprezece"
z = x & "bani"
End If

If NumStr10 = 1 And NumStr11 > 1 And NumStr11 <= 9 Then
x = Numbers(Left(NumStr11, 1)) & "sprezece"
z = x & "bani"
End If


If NumStr10 = 2 And NumStr11 = 0 Then
x = "douazeci"
z = x & "bani"
End If

If NumStr10 >= 2 Then

If NumStr11 = 0 Then

x = Tens(Left(NumStr10, 1))
z = x & "bani"

Else

x = Tens(Left(NumStr10, 1)) & "si" & Numbers(Left(NumStr11, 1))
z = x & "bani"

End If

End If




' aici incepe afisarea pentru xxx xxx 999

If NumStr1 = 0 And NumStr2 = 0 And NumStr3 = 0 Then
a = "lei"
p = a
End If


If NumStr1 = 1 And NumStr2 = 0 And NumStr3 = 0 Then
a = "unleu"
p = a
End If

If NumStr1 < 10 And NumStr1 > 1 And NumStr2 = 0 And NumStr3 = 0 Then
a = Numbers(Left(NumStr1, 1))
p = a & "lei"
End If


If NumStr1 = 0 And NumStr2 = 1 And NumStr3 = 0 Then
a = "zece"
p = a & "lei"
End If

If NumStr1 = 1 And NumStr2 = 1 And NumStr3 = 0 Then
a = "unsprezece"
p = a & "lei"
End If

If NumStr2 = 1 And NumStr1 > 1 And NumStr1 <= 9 And NumStr3 = 0 Then
a = Numbers(Left(NumStr1, 1)) & "sprezece"
p = a & "lei"
End If

If NumStr1 = 0 And NumStr2 = 2 And NumStr3 = 0 Then
a = "douazeci"
p = a & "lei"
End If

If NumStr2 >= 2 And NumStr3 = 0 Then

If NumStr1 = 0 Then

a = Tens(Left(NumStr2, 1))
p = a & "lei"

Else

a = Tens(Left(NumStr2, 1)) & "si" & Numbers(Left(NumStr1, 1))
p = a & "lei"

End If

End If

If NumStr1 = 0 And NumStr2 = 0 And NumStr3 = 1 Then
a = "osuta"
p = a & "lei"
Else

If NumStr1 > 0 And NumStr1 <= 9 And NumStr2 = 0 And NumStr3 = 1 Then
a = "osuta" & Numbers(Left(NumStr1, 1))
p = a & "lei"
End If

If NumStr1 = 0 And NumStr2 = 1 And NumStr3 = 1 Then
a = "osuta" & "zece"
p = a & "lei"
End If

If NumStr1 = 1 And NumStr2 = 1 And NumStr3 = 1 Then
a = "osuta" & "unsprezece"
p = a & "lei"
End If

If NumStr1 > 1 And NumStr1 <= 9 And NumStr2 = 1 And NumStr3 = 1 Then
a = "osuta" & Numbers(Left(NumStr1, 1)) & "sprezece"
p = a & "lei"
End If

If NumStr3 = 1 And NumStr2 > 1 And NumStr2 <= 9 Then
If NumStr1 = 0 Then
a = "osuta" & Tens(Left(NumStr2, 1))
p = a & "lei"
Else
a = "osuta" & Tens(Left(NumStr2, 1)) & "si" & Numbers(Left(NumStr1, 1))
p = a & "lei"
End If
End If


If NumStr3 = 2 And NumStr2 = 0 And NumStr1 = 0 Then
a = "douasute"
p = a & "lei"
Else

If NumStr1 <> 0 And NumStr2 = 0 And NumStr3 = 2 Then
a = "douasute" & Numbers(Left(NumStr1, 1))
p = a & "lei"
End If
End If

If NumStr1 = 0 And NumStr2 = 1 And NumStr3 = 2 Then
a = "douasutezece"
p = a & "lei"
End If

If NumStr1 = 1 And NumStr2 = 1 And NumStr3 = 2 Then
a = "douasute" & "unsprezece"
p = a & "lei"
End If

If NumStr1 > 1 And NumStr1 <= 9 And NumStr2 = 1 And NumStr3 = 2 Then
a = "douasute" & Numbers(Left(NumStr1, 1)) & "sprezece"
p = a & "lei"
End If

If NumStr3 = 2 And NumStr2 > 1 And NumStr2 <= 9 Then
If NumStr1 = 0 Then
a = "douasute" & Tens(Left(NumStr2, 1))
p = a & "lei"
Else
a = "douasute" & Tens(Left(NumStr2, 1)) & "si" & Numbers(Left(NumStr1, 1))
p = a & "lei"
End If
End If

If NumStr1 = 0 And NumStr2 = 0 And NumStr3 > 2 And NumStr3 <= 9 Then
a = Numbers(Left(NumStr3, 1)) & "sute"
p = a & "lei"
End If

If NumStr1 > 0 And NumStr1 <= 9 And NumStr2 = 0 And NumStr3 > 2 And NumStr3 <= 9 Then
a = Numbers(Left(NumStr3, 1)) & "sute" & Numbers(Left(NumStr1, 1))
p = a & "lei"
End If

If NumStr1 = 0 And NumStr2 = 1 And NumStr3 > 2 And NumStr3 <= 9 Then
a = Numbers(Left(NumStr3, 1)) & "sute" & "zece"
p = a & "lei"
End If

If NumStr1 = 1 And NumStr2 = 1 And NumStr3 > 2 And NumStr3 <= 9 Then
a = Numbers(Left(NumStr3, 1)) & "sute" & "unsprezece"
p = a & "lei"
End If

If NumStr1 > 1 And NumStr1 <= 9 And NumStr2 = 1 And NumStr3 > 2 And NumStr3 <= 9 Then
a = Numbers(Left(NumStr3, 1)) & "sute" & Numbers(Left(NumStr1, 1)) & "sprezece"
p = a & "lei"
End If


If NumStr2 <> 1 And NumStr2 <> 0 And NumStr3 > 2 And NumStr3 <= 9 Then

If NumStr1 = 0 Then
a = Numbers(Left(NumStr3, 1)) & "sute" & Tens(Left(NumStr2, 1))
p = a & "lei"
Else
a = Numbers(Left(NumStr3, 1)) & "sute" & Tens(Left(NumStr2, 1)) & "si" & Numbers(Left(NumStr1, 1))
p = a & "lei"
End If

End If
End If

' aici se termina pentru xxx xxx 999 si incepe xxx 999 xxx

If NumStr4 = 1 And NumStr5 = 0 And NumStr6 = 0 Then
b = "omie"
q = b
End If

If NumStr4 = 2 And NumStr5 = 0 And NumStr6 = 0 Then
b = "doua"
q = b & "mii"
End If


If NumStr4 < 10 And NumStr4 > 2 And NumStr5 = 0 And NumStr6 = 0 Then
b = Sutemii(Left(NumStr4, 1))
q = b & "mii"
End If


If NumStr4 = 0 And NumStr5 = 1 And NumStr6 = 0 Then
b = "zece"
q = b & "mii"
End If

If NumStr4 = 1 And NumStr5 = 1 And NumStr6 = 0 Then
b = "unsprezece"
q = b & "mii"
End If

If NumStr5 = 1 And NumStr4 > 1 And NumStr4 <= 9 And NumStr6 = 0 Then
b = Numbers(Left(NumStr4, 1)) & "sprezece"
q = b & "mii"
End If

If NumStr4 = 0 And NumStr5 = 2 And NumStr6 = 0 Then
b = "douazeci"
q = b & "mii"
End If

If NumStr5 >= 2 And NumStr6 = 0 Then

If NumStr4 = 0 Then

b = Tens(Left(NumStr5, 1))
q = b & "mii"

Else

b = Tens(Left(NumStr5, 1)) & "si" & Sutemii(Left(NumStr4, 1))
q = b & "mii"

End If

End If

If NumStr4 = 0 And NumStr5 = 0 And NumStr6 = 1 Then
b = "osuta"
q = b & "mii"
Else

If NumStr4 > 0 And NumStr4 <= 9 And NumStr5 = 0 And NumStr6 = 1 Then
b = "osuta" & Sutemii(Left(NumStr4, 1))
q = b & "mii"
End If

If NumStr4 = 0 And NumStr5 = 1 And NumStr6 = 1 Then
b = "osuta" & "zece"
q = b & "mii"
End If

If NumStr4 = 1 And NumStr5 = 1 And NumStr6 = 1 Then
b = "osuta" & "unsprezece"
q = b & "mii"
End If

If NumStr4 > 1 And NumStr4 <= 9 And NumStr5 = 1 And NumStr6 = 1 Then
b = "osuta" & Sutemii(Left(NumStr4, 1)) & "sprezece"
q = b & "mii"
End If

If NumStr6 = 1 And NumStr5 > 1 And NumStr5 <= 9 Then
If NumStr4 = 0 Then
b = "osuta" & Tens(Left(NumStr5, 1))
q = b & "mii"
Else
b = "osuta" & Tens(Left(NumStr5, 1)) & "si" & Sutemii(Left(NumStr4, 1))
q = b & "mii"
End If
End If


If NumStr6 = 2 And NumStr5 = 0 And NumStr4 = 0 Then
b = "douasute"
q = b & "mii"
Else

If NumStr4 <> 0 And NumStr5 = 0 And NumStr6 = 2 Then
b = "douasute" & Sutemii(Left(NumStr4, 1))
q = b & "mii"
End If
End If

If NumStr4 = 0 And NumStr5 = 1 And NumStr6 = 2 Then
b = "douasutezece"
q = b & "mii"
End If

If NumStr4 = 1 And NumStr5 = 1 And NumStr6 = 2 Then
b = "douasute" & "unsprezece"
q = b & "mii"
End If

If NumStr4 > 1 And NumStr4 <= 9 And NumStr5 = 1 And NumStr6 = 2 Then
b = "douasute" & Sutemii(Left(NumStr4, 1)) & "sprezece"
q = b & "mii"
End If

If NumStr6 = 2 And NumStr5 > 1 And NumStr5 <= 9 Then
If NumStr4 = 0 Then
b = "douasute" & Tens(Left(NumStr5, 1))
q = b & "mii"
Else
b = "douasute" & Tens(Left(NumStr5, 1)) & "si" & Sutemii(Left(NumStr4, 1))
q = b & "mii"
End If
End If


If NumStr4 = 0 And NumStr5 = 0 And NumStr6 > 2 And NumStr6 <= 9 Then
b = Sutemii(Left(NumStr6, 1)) & "sute"
q = b & "mii"
End If

If NumStr4 > 0 And NumStr4 <= 9 And NumStr5 = 0 And NumStr6 > 2 And NumStr6 <= 9 Then
b = Numbers(Left(NumStr6, 1)) & "sute" & Sutemii(Left(NumStr4, 1))
q = b & "mii"
End If

If NumStr4 = 0 And NumStr5 = 1 And NumStr6 > 2 And NumStr6 <= 9 Then
b = Numbers(Left(NumStr6, 1)) & "sute" & "zece"
q = b & "mii"
End If

If NumStr4 = 1 And NumStr5 = 1 And NumStr6 > 2 And NumStr6 <= 9 Then
b = Numbers(Left(NumStr6, 1)) & "sute" & "unsprezece"
q = b & "mii"
End If

If NumStr4 > 1 And NumStr4 <= 9 And NumStr5 = 1 And NumStr6 > 2 And NumStr6 <= 9 Then
b = Numbers(Left(NumStr6, 1)) & "sute" & Numbers(Left(NumStr4, 1)) & "sprezece"
q = b & "mii"
End If


If NumStr5 <> 1 And NumStr5 <> 0 And NumStr6 > 2 And NumStr6 <= 9 Then

If NumStr4 = 0 Then
b = Numbers(Left(NumStr6, 1)) & "sute" & Tens(Left(NumStr5, 1))
q = b & "mii"
Else
b = Numbers(Left(NumStr6, 1)) & "sute" & Tens(Left(NumStr5, 1)) & "si" & Sutemii(Left(NumStr4, 1))
q = b & "mii"
End If

End If
End If

' Aici se termina xxx 999 xxx si incepe 999 xxx xxx

If NumStr7 = 1 And NumStr8 = 0 And NumStr9 = 0 Then
c = "unmilion"
r = c
End If

If NumStr7 = 2 And NumStr8 = 0 And NumStr9 = 0 Then
c = "doua"
r = c & "milioane"
End If


If NumStr7 < 10 And NumStr7 > 2 And NumStr8 = 0 And NumStr9 = 0 Then
c = Numbers(Left(NumStr7, 1))
r = c & "milioane"
End If


If NumStr7 = 0 And NumStr8 = 1 And NumStr9 = 0 Then
c = "zece"
r = c & "milioane"
End If

If NumStr7 = 1 And NumStr8 = 1 And NumStr9 = 0 Then
c = "unsprezece"
r = c & "milioane"
End If

If NumStr8 = 1 And NumStr7 > 1 And NumStr7 <= 9 And NumStr9 = 0 Then
c = Numbers(Left(NumStr7, 1)) & "sprezece"
r = c & "milioane"
End If

If NumStr7 = 0 And NumStr8 = 2 And NumStr9 = 0 Then
c = "douazeci"
r = c & "milioane"
End If

If NumStr8 >= 2 And NumStr9 = 0 Then

If NumStr7 = 0 Then

c = Tens(Left(NumStr8, 1))
r = c & "milioane"

Else

c = Tens(Left(NumStr8, 1)) & "si" & Numbers(Left(NumStr7, 1))
r = c & "milioane"

End If

End If

If NumStr7 = 0 And NumStr8 = 0 And NumStr9 = 1 Then
c = "osuta"
r = c & "milioane"
Else

If NumStr7 > 0 And NumStr7 <= 9 And NumStr8 = 0 And NumStr9 = 1 Then
c = "osuta" & Numbers(Left(NumStr7, 1))
r = c & "milioane"
End If

If NumStr7 = 0 And NumStr8 = 1 And NumStr9 = 1 Then
c = "osuta" & "zece"
r = c & "milioane"
End If

If NumStr7 = 1 And NumStr8 = 1 And NumStr9 = 1 Then
c = "osuta" & "unsprezece"
r = c & "milioane"
End If

If NumStr7 > 1 And NumStr7 <= 9 And NumStr8 = 1 And NumStr9 = 1 Then
c = "osuta" & Numbers(Left(NumStr7, 1)) & "sprezece"
r = c & "milioane"
End If

If NumStr9 = 1 And NumStr8 > 1 And NumStr8 <= 9 Then
If NumStr7 = 0 Then
c = "osuta" & Tens(Left(NumStr8, 1))
r = c & "milioane"
Else
c = "osuta" & Tens(Left(NumStr8, 1)) & "si" & Numbers(Left(NumStr7, 1))
r = c & "milioane"
End If
End If


If NumStr9 = 2 And NumStr8 = 0 And NumStr7 = 0 Then
c = "douasute"
r = c & "milioane"
Else

If NumStr7 <> 0 And NumStr8 = 0 And NumStr9 = 2 Then
c = "douasute" & Numbers(Left(NumStr7, 1))
r = c & "milioane"
End If
End If

If NumStr7 = 0 And NumStr8 = 1 And NumStr9 = 2 Then
c = "douasutezece"
r = c & "milioane"
End If

If NumStr7 = 1 And NumStr8 = 1 And NumStr9 = 2 Then
c = "douasute" & "unsprezece"
r = c & "milioane"
End If

If NumStr7 > 1 And NumStr7 <= 9 And NumStr8 = 1 And NumStr9 = 2 Then
c = "douasute" & Numbers(Left(NumStr7, 1)) & "sprezece"
r = c & "milioane"
End If

If NumStr9 = 2 And NumStr8 > 1 And NumStr8 <= 9 Then
If NumStr7 = 0 Then
c = "douasute" & Tens(Left(NumStr8, 1))
r = c & "milioane"
Else
c = "douasute" & Tens(Left(NumStr8, 1)) & "si" & Numbers(Left(NumStr7, 1))
r = c & "milioane"
End If
End If



If NumStr7 = 0 And NumStr8 = 0 And NumStr9 > 2 And NumStr9 <= 9 Then
c = Numbers(Left(NumStr9, 1)) & "sute"
r = c & "milioane"
End If

If NumStr7 > 0 And NumStr7 <= 9 And NumStr8 = 0 And NumStr9 > 2 And NumStr9 <= 9 Then
c = Numbers(Left(NumStr9, 1)) & "sute" & Numbers(Left(NumStr7, 1))
r = c & "milioane"
End If

If NumStr7 = 0 And NumStr8 = 1 And NumStr9 > 2 And NumStr9 <= 9 Then
c = Numbers(Left(NumStr9, 1)) & "sute" & "zece"
r = c & "milioane"
End If

If NumStr7 = 1 And NumStr8 = 1 And NumStr9 > 2 And NumStr9 <= 9 Then
c = Numbers(Left(NumStr9, 1)) & "sute" & "unsprezece"
r = c & "milioane"
End If

If NumStr7 > 1 And NumStr7 <= 9 And NumStr8 = 1 And NumStr9 > 2 And NumStr9 <= 9 Then
c = Numbers(Left(NumStr9, 1)) & "sute" & Numbers(Left(NumStr7, 1)) & "sprezece"
r = c & "milioane"
End If


If NumStr8 <> 1 And NumStr8 <> 0 And NumStr9 > 2 And NumStr9 <= 9 Then

If NumStr7 = 0 Then
c = Numbers(Left(NumStr9, 1)) & "sute" & Tens(Left(NumStr8, 1))
r = c & "milioane"
Else
c = Numbers(Left(NumStr9, 1)) & "sute" & Tens(Left(NumStr8, 1)) & "si" & Numbers(Left(NumStr7, 1))
r = c & "milioane"
End If

End If
End If

' Aici se termina 999 xxx xxx


If NumStr1 = 0 And NumStr2 = 0 And NumStr3 = 0 And NumStr4 = 0 And NumStr5 = 0 And NumStr6 = 0 And NumStr7 = 0 And NumStr8 = 0 And NumStr9 = 0 Then
Litere = z

Else
If NumStr10 = 0 And NumStr11 = 0 Then

Litere = r & q & p

Else
Litere = r & q & p & "si" & z

End If
End If

End Function


Edited by Berti, 16 April 2008 - 08:24.


#40
Mycro

Mycro

    Member

  • Grup: Members
  • Posts: 244
  • Înscris: 10.12.2002

 Berti, on Apr 16 2008, 09:22, said:

Banuiesc ca nu lucrati cu sume mai mari de atat :P  
Daca totusi se scrie suma asta, pentru un comision de nimic, 0,001% vin s-o scriu personal de mana.

Succes.
Ok, la prima suma de genul ala, te anunt :) (avand in vedere ca momentan cea mai mare suma pe care trebuie s-o introduc e 124,52 lei o sa dureze ceva :rolleyes: )
Merge perfect functia.

Multumesc :thumbup:

P.S: Atasez si "chitantierul" finalizat, poate mai are cineva nevoie de el.
Attached File  Chitantier.zip   22.29K   513 downloads


#41
B3aT

B3aT

    Member

  • Grup: Members
  • Posts: 749
  • Înscris: 02.03.2005
Un algoritm "barbar" dar isi face treaba, bv.

Oricum din cate stiu eu nu poti elibera o chitanta cu o valoare mai mare de 5000 lei, asa ca nu va faceti griji.

#42
Berti

Berti

    233SP09

  • Grup: Senior Members
  • Posts: 3,068
  • Înscris: 02.03.2006

 B3aT, on Apr 17 2008, 13:45, said:

Un algoritm "barbar" dar isi face treaba, bv.

Recunosc asta, dar scopu mijloacele... nevand pregatire in domeniu l-am facut dupa ureche.
Nefacandu-l de placere, ci de nevoie, nu m-o intresat optimizarea lui, singura modificare am facut-o cand s-a trecut la leul greu.
Iar chestia cu limita, era inca de pe vremea ROL-ului, cand o 999 mil. nu era o suma inimaginabila pentru un OP. Normal, acum cu leul greu nici nu se pune problema sa ajungi la aceasta suma.

#43
BugHunter

BugHunter

    Member

  • Grup: Members
  • Posts: 377
  • Înscris: 03.11.2003
vezi versiunea mea care are exemplu de folosire in excel.

 Mycro, on Apr 15 2008, 12:44, said:

Imi trebuie un macro excel care sa converteasca din lei in litere. Am luat functia asta si am tradus valorile in romana, dar nu merge cum trebuie (am atasat rezultatul)
Ex:
- 23,43 lei apare 'douazeci treiLeisipatruzeci treiBani' in loc de 'douazecisitreiLeisipatruzecisitreiBani'
- 100,01 lei apare 'unusuteLeisiunuBani' in loc de 'osutaLeisiunBan'

Ce trebuie modificat? (de mentionat ca nu stiu programare)
functie_lei.txt


#44
lordull

lordull

    New Member

  • Grup: Members
  • Posts: 21
  • Înscris: 21.04.2006
Am si eu o problema in excel si anume a coloana C cu numere cu 3 zecimale si cand ai dau cu 2 zecimale în spatele aspectului raman tot 3 zecimale deci cum as putea face sa se schimbe in 2 zecimale ??????

ex in casuta A1 am nr 1.123 transform in 2 zecimale 1.12 iar in casuta C1 am 1.12 si B1 sa zicem este 10 dar cand dau dexemplu o formulaD1 =INDEX(B1;MATCH(C1;A1;0);1) imi ea valoarea din A1 de 1.123 cum fac ca sa eie numai valoarea 1.12??????????????

sau exissta vreo formula care sa -ti treaca valoarea cu 2 zecimale si atat in alta casuta(adica A1=1.123 si pun o formula in B1 ca sa-mi dea 1.12 simplu) ??????

pls Help
pls Help
pls Help

#45
eFBIai

eFBIai

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 04.02.2006

Quote

Asta-i solutia, din cate tin minte m-am ocupat de toate exceptiile.

exemple de mai sus le rezolva asa:

- 23.43 ->douazecisitreileisipatruzecisitreibani
- 100.01 ->osutaleisiunban
- 99999999.99 -> nouazecisinouamilioanenouasutenouazecisinouamiinouasutenouazecisinoualeisinouaze
cisinouabani (SP nu permite afisearea unui sir de caractere atat de lung)
- 1000000000 -> valoare prea mare

Banuiesc ca nu lucrati cu sume mai mari de atat  :P
Daca totusi se scrie suma asta, pentru un comision de nimic, 0,001% vin s-o scriu personal de mana.


Hello!
Poate cineva (dar foarte repede :P) modifica algoritmul asta in asa fel incat sa transcrie in litere numai leii, nu si banii ? :worthy:
Eu am incercat dar nu ma descurc, desi inteleg vag ce se intampla acolo...

Exemplu: 209.41 -> douasutenoualei41bani

Multumesc.

Edited by eFBIai, 20 March 2009 - 08:36.


#46
eFBIai

eFBIai

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 04.02.2006

 eFBIai, on Mar 20 2009, 08:32, said:

Hello!
Poate cineva (dar foarte repede :P) modifica algoritmul asta in asa fel incat sa transcrie in litere numai leii, nu si banii ? :worthy:
Eu am incercat dar nu ma descurc, desi inteleg vag ce se intampla acolo...

Exemplu: 209.41 -> douasutenoualei41bani

Multumesc.

E ok, daca s-a apucat cineva de treaba  :P  sa renunte, am reusit s-o fac singur.
O zi frumoasa!

#47
mgh

mgh

    Junior Member

  • Grup: Members
  • Posts: 116
  • Înscris: 29.12.2004
Varianta PHP

function Citesc($nr) {
if($nr >= 1000000000) return "DEPASIRE";
if($nr >= 1000000)//un milion
{
$a=intval($nr/1000000);//cate milioane sint...
if($a == 1) $string.="unmilion";
else // mai multe milioane
$string.=$this->Parte($a)."milioane";
}

$nr=$nr-($a*1000000);//sute de mii

if($nr >= 1000)//o mie
{
$a=intval($nr/1000);//cate mii sint...
if($a == 1) $string.="unamie";
else // mai multe milioane
$string.=$this->Parte($a)."mii";
}

$nr=$nr-($a*1000);//sute
if($nr >= 1)
{
$a=intval($nr/1);//
$string.=$this->Parte($a);
}

if ($nr>2) $string.='lei';
else if ($nr>1) $string.="leu";
else if ($nr>0) $string.='zerolei';

$bani=number_format(($nr-intval($nr))*100);
//banii
if ($bani>0) {
$string.="si";
$string.=$this->Parte($bani);
if ($bani>1) $string.="bani";
else $string.="ban";
}

return $string;

}

function Parte($nr)
{
$mat[0]="zero";
$mat[1]="unu";
$mat[2]="doua";
$mat[3]="trei";
$mat[4]="patru";
$mat[5]="cinci";
$mat[6]="sase";
$mat[7]="sapte";
$mat[8]="opt";
$mat[9]="noua";

$a=intval($nr/100);
if($a > 0)
{
if($a == 1)
$comun.="osuta";
else
if($a == 2)
$comun.="douasute";
else
$comun.=$mat[$a]."sute";
}
$nrn=$nr-$a*100;
$b=intval($nrn/10);
$c=$nrn-$b*10;

if($b > 0)
{
if($b == 1)
{
if($c == 0) $comun.="zece";
else
if($c == 1) $comun.="unsprezece";
else
if($c == 2) $comun.="doisprezece";
else
if($c == 4) $comun.="paisprezece";
else
if($c == 5) $comun.="cinsprezece";
else
if($c == 6) $comun.="saisprezece";

else
$comun.=$mat[$c]."sprezece";
return $comun;
}
else
{
if($b == 2)
$comun.="douazeci";
else if($b == 5)
$comun.="cinzeci";
else if($b == 6)
$comun.="saizeci";
else
$comun.=$mat[$b]."zeci";
}
}

if($c > 0)
{
if($b > 0) $comun.="si";
if ($c==1 && $nr<2) $comun.="un";
else if ($c==2 && $nr<3) $comun.="doi";
else $comun.=$mat[$c];
}

return $comun;

}

Edited by mgh, 19 May 2009 - 11:03.


#48
tudor32

tudor32

    Active Member

  • Grup: Members
  • Posts: 1,008
  • Înscris: 19.11.2008

 lordull, on 10th February 2009, 16:20, said:

Am si eu o problema in excel si anume a coloana C cu numere cu 3 zecimale si cand ai dau cu 2 zecimale în spatele aspectului raman tot 3 zecimale deci cum as putea face sa se schimbe in 2 zecimale ??????

ex in casuta A1 am nr 1.123 transform in 2 zecimale 1.12 iar in casuta C1 am 1.12 si B1 sa zicem este 10 dar cand dau dexemplu o formulaD1 =INDEX(B1;MATCH(C1;A1;0);1) imi ea valoarea din A1 de 1.123 cum fac ca sa eie numai valoarea 1.12??????????????

sau exissta vreo formula care sa -ti treaca valoarea cu 2 zecimale si atat in alta casuta(adica A1=1.123 si pun o formula in B1 ca sa-mi dea 1.12 simplu) ??????

pls Help
pls Help
pls Help


incearca cu functia ROUNDE  :rolleyes:

#49
dotniet

dotniet

    Member

  • Grup: Members
  • Posts: 852
  • Înscris: 15.08.2005

 dixy, on 10th October 2004, 17:43, said:

Uite ca am facut eu programul.Din pacate nu e pascal

Jesus man!
Learn some programming!


Tu ar trebui sa incepi cu Basic. Si abia apoi sa treci la VB, FoxPro si Pascal.

#50
cristiursu

cristiursu

    New Member

  • Grup: Members
  • Posts: 8
  • Înscris: 02.07.2007
Nu stiu pe cati mai intereseaza dar uite un cod verificat si foarte rapid, facut in VB

- Merge pana la 999 miliarde
- e versiunea fara zecimale, se poate adapta... cred ca am si o versiune cu zecimale pe undeva
- e versiunea cu spatii intre cuvinte, e mai citetz - spatiile se pot scoate la nevoie, cu mici modificari in cod
- se poate extinde usor la trilioane si catralioane, are un algoritm pe grupuri de 3 digiti, aici foloseste doar 4 grupuri

Function spl(nr As Long)
Dim st, nsp, n10p As String
Dim k, i, lim As Integer
Dim fst As Double, grup() As Long
Dim n(1000) As String
'---------------------------------------------------
st = ""
n(0) = ""
n(1) = "una"
n(2) = "doua"
n(3) = "trei"
n(4) = "patru"
n(5) = "cinci"
n(6) = "sase"
n(7) = "sapte"
n(8) = "opt"
n(9) = "noua"
n(10) = "zece"
n10p = "zeci"
nsp = "spre"
If nr < 999 Then lim = nr Else lim = 999
'---------------------------------------------------
For i = 11 To lim
	If i > 10 And i < 20 Then
		n(i) = n(i - 10) & "spre" & n(10)
		If i = 11 Then n(i) = "un" & nsp & n(10)
		If i = 12 Then n(i) = "doi" & nsp & n(10)
		If i = 14 Then n(i) = "pai" & nsp & n(10)
		If i = 16 Then n(i) = "sai" & nsp & n(10)
	End If
	If i > 19 And i < 100 Then
		If Int(i / 10) - i / 10 = 0 Then
			n(i) = n(i / 10) & n10p
			If i = 60 Then n(i) = "sai" & n10p
		Else
			n(i) = n(Int(i / 10) * 10) & " si " & n(i - Val(Int(i / 10)) * 10)
		End If
	End If
	If i > 99 And i < 1000 Then
		If Int(i / 100) - i / 100 = 0 Then
				n(i) = n(Int(i / 100)) & " sute "
				n(100) = "o suta "
		Else
				n(i) = n(Val(Int(i / 100)) * 100) & n(i - Val(Int(i / 100)) * 100)
		End If
	End If
Next i
'---------------------------------------------------
ReDim grup(10) As Long
k = 0
fst = str(nr)
Do While fst > 999
	k = k + 1
	grup(k) = fst - Int(fst / 1000) * 1000
	fst = Int(fst / 1000)
Loop
k = k + 1
grup(k) = fst
fst = Empty
'---------------------------------------------------
Do While k > 0
-- Aici poate intra cod similar pt mai multe grupuri k=5, 6, etc pana la 10
	If k = 4 Then
		If grup(k) <> 0 Then
			If grup(k) = 1 Then
				n(grup(k)) = "un"
				st = st & n(grup(k)) & " miliard "
			Else
				If (grup(k) > 1 And grup(k) < 20) Or (Right(grup(k), 2) > 0 And Right(grup(k), 2) < 20) Then
					st = st & n(grup(k)) & " miliarde "
				Else
					st = st & n(grup(k)) & " de miliarde "
				End If
			End If
		End If
	End If
	If k = 3 Then
		If grup(k) <> 0 Then
			If grup(k) = 1 Then
				n(grup(k)) = "un"
				st = st & n(grup(k)) & " milion "
			Else
				If (grup(k) > 1 And grup(k) < 20) Or (Right(grup(k), 2) > 0 And Right(grup(k), 2) < 20) Then
					st = st & n(grup(k)) & " milioane "
				Else
					st = st & n(grup(k)) & " de milioane "
				End If
			End If
		End If
	End If
	If k = 2 Then
		If grup(k) <> 0 Then
			If grup(k) = 1 Then
				n(grup(k)) = "o"
				st = st & n(grup(k)) & " mie "
			Else
				If (grup(k) > 1 And grup(k) < 20) Or (Right(grup(k), 2) > 0 And Right(grup(k), 2) < 20) Then
					st = st & n(grup(k)) & " mii "
				Else
					st = st & n(grup(k)) & " de mii "
				End If
			End If
		End If
	End If
	If k = 1 Then
		If grup(k) <> 0 Then
			If grup(k) = 1 Then
				n(grup(k)) = " unu"
				st = st & n(grup(k))
			Else
				If (grup(k) > 1 And grup(k) < 20) Or (Right(grup(k), 2) >= 0 And Right(grup(k), 2) < 20) Then
					st = st & n(grup(k))
				Else
					st = st & n(grup(k))
				End If
			End If
		End If
	End If
	If Right(st, 3) = "una" Then
		st = Mid(st, 1, Len(st) - 3) & "unu"
	End If
	If Right(st, 4) = "doua" Then
		st = Mid(st, 1, Len(st) - 4) & "doi"
	End If
	k = k - 1
Loop
'---------------------------------------------------
spl = st
End Function

succes

#51
osmiu

osmiu

    Junior Member

  • Grup: Members
  • Posts: 154
  • Înscris: 28.09.2006
ceva de genul ?

Attached Files



#52
anonimul4all

anonimul4all

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 27.12.2008
Salut,

Nu ma prea pricep si as avea nevoie de ajutor din partea voastra, cum procedez pentru excel 2007 sa transform nuemrele in litere (este vorba de un chitantier ) daca este unul din codurile acestea bune, cum il bag in excel?

Stima

#53
phloo

phloo

    New Member

  • Grup: Members
  • Posts: 2
  • Înscris: 13.07.2010
Salut,

Am facut eu acest program minune. E scris in JAVA si merge destul de bine. Poate ajuta si alta lume. E destul de complicat, da, uneori am tendinta sa compilc lucrurile, dar important e ca merge. Suporta numere pana la sute de miliarde. Caracterul decimal este punctul:

Tot ce trebuie sa faceti este sa copiati codul si sa apelati functia numberToString(String number). Exemplu: numberToString("1234537234.23")




public String numberToString(String number)
{
try{
String rezult="";
String partea_intreaga="";
String partea_zecimala="";
number=number.replace(",", "."); // in cazul in care se apeleaza cu , in loc de . ca si caracter decimal
//Impartim numarul in parte intreaga si partea zecimala
StringTokenizer tokens = new StringTokenizer(number, ".");
if(number.contains("."))
{
partea_intreaga = tokens.nextToken();
partea_zecimala = tokens.nextToken();
}
else
{
partea_intreaga = number;
}
if(!partea_zecimala.equals(""))
if(partea_zecimala.length() <= 3)
rezult=getWholenumberToString(partea_intreaga)+" virgula "+getWholenumberToString(partea_zecimala);
else
rezult=getWholenumberToString(partea_intreaga)+" virgula "+getTheRrestOfTheNumber(partea_zecimala);
else
rezult=getWholenumberToString(partea_intreaga);
rezult=rezult.replaceAll(" +", " "); //scoatem toate spatiile multiple
rezult=rezult.replace("zero miliarde", ""); // evitam expresiile de genul
rezult=rezult.replace("zero milioane", ""); // evitam expresiile de genul
rezult=rezult.replace("zero mi", ""); // evitam expresiile de genul
rezult=rezult.replaceAll(" +", " "); //scoatem toate spatiile multiple
return rezult;
}
catch(NumberFormatException e)
{
return "EROARE DE CONVERSIE. NUMARUL CONTINE CARACTERE ILEGALE";
}
}

public String getWholenumberToString(String partea_intreaga) throws NumberFormatException
{
String rezult="";
String selected_digits="";
String temp="";
int contor=0;
int nrOfDigits=0;
while(partea_intreaga.length() > 0)
{   temp="";
if(partea_intreaga.length() >= 3)
nrOfDigits = 3;
else
if(partea_intreaga.length() >= 2)
nrOfDigits = 2;
else
if(partea_intreaga.length() >= 1)
nrOfDigits = 1;
//selectam cele mai nesemnificative 1/2/3 cifre din partea intreaga
selected_digits=partea_intreaga.substring(partea_intreaga.length()-nrOfDigits,partea_intreaga.length());
partea_intreaga=partea_intreaga.substring(0,partea_intreaga.length()-nrOfDigits); //scoatm cifrele selectate din sir
if(getnumberToString3Digits(selected_digits).contains("zeci") || getnumberToString3Digits(selected_digits).contains("sute") && contor != 0)
temp+="de";  // adaugam cuvantul 'de' daca este necesar

//daca avem doar un miliard/mie/milion
if(contor > 0 && (selected_digits.equals("001") || selected_digits.equals("01") || selected_digits.equals("1")))
{
switch(contor)
{
case 0: temp+=" "; break;
case 1: temp+=" o mie "; break;
case 2: temp+=" un milion "; break;
case 3: temp+=" un miliard "; break;
}
rezult=temp+rezult;
}
else
  //daca avem doar doua miliarde/mi/milioane
if(contor > 0 && (selected_digits.equals("002") || selected_digits.equals("02") || selected_digits.equals("2")))
{
switch(contor)
{
case 0: temp+=" "; break;
case 1: temp+=" doua mi "; break;
case 2: temp+=" doua milioane "; break;
case 3: temp+=" doua miliarde "; break;
}
rezult=temp+rezult;
}
else
{
switch(contor)
{
case 0: temp+=" "; break;
case 1: temp+=" mi "; break;
case 2: temp+=" milioane "; break;
case 3: temp+=" miliarde "; break;
}
rezult=getnumberToString3Digits(selected_digits)+temp+rezult;
}
//contorul ne spune la ce parte din numar suntem (miliarde 3, milioane 2, mi 1, sau sute 0)
contor++;
} // end while

//este posibil ca intreg rezultatul sa se termine in cuvantul 'de ' ceea ce nu e de dorit. il vom elimina
if(rezult.endsWith("de "))
rezult=rezult.substring(0,rezult.length()-3);
return rezult;
}
public String getTheRrestOfTheNumber(String number)
{
String rezultat="";
String theNR = number;
while(theNR.length() > 0)
{
switch(Integer.parseInt(theNR.charAt(0)+""))
{
case 0: rezultat+="zero "; break;
case 1: rezultat+="unu "; break;
case 2: rezultat+="doi "; break;
case 3: rezultat+="trei "; break;
case 4: rezultat+="patru "; break;
case 5: rezultat+="cinci "; break;
case 6: rezultat+="sase "; break;
case 7: rezultat+="sapte "; break;
case 8: rezultat+="opt "; break;
case 9: rezultat+="noua "; break;
}
theNR=theNR.substring(1, theNR.length());
}
return rezultat;
}


public String getnumberToString3Digits(String number) throws NumberFormatException
{
String rezultat="";
String theNR=number;
if(theNR.length() == 3)
{
int nr=Integer.parseInt(number.charAt(0)+"");
switch (nr)
{
case 0: rezultat+=""; break;
case 1: rezultat+="o suta "; break;
case 2: rezultat+="doua sute "; break;
case 3: rezultat+="trei sute "; break;
case 4: rezultat+="patru sute "; break;
case 5: rezultat+="cinci sute "; break;
case 6: rezultat+="sase sute "; break;
case 7: rezultat+="sapte sute "; break;
case 8: rezultat+="opt sute "; break;
case 9: rezultat+="noua sute "; break;
}
  theNR=theNR.substring(1, theNR.length());
  rezultat+= getnumberToString3Digits(theNR);
}
else
if(theNR.length() == 2)
{
if(theNR.charAt(0) == '1')
{
switch(Integer.parseInt(theNR.charAt(1)+""))
{
case 0: rezultat+="zece "; break;
case 1: rezultat+="unsprezece "; break;
case 2: rezultat+="douasprezece "; break;
case 3: rezultat+="treisprezece "; break;
case 4: rezultat+="patrusprezece "; break;
case 5: rezultat+="cincisprezece "; break;
case 6: rezultat+="saisprezece "; break;
case 7: rezultat+="saptesprezece "; break;
case 8: rezultat+="optsprezece "; break;
case 9: rezultat+="nouasprezece "; break;
}
}
else
{
switch(Integer.parseInt(theNR.charAt(0)+""))
{
case 0: rezultat+=""; break;
case 2: rezultat+="douazeci "; break;
case 3: rezultat+="treizeci "; break;
case 4: rezultat+="patruzeci "; break;
case 5: rezultat+="cincizeci "; break;
case 6: rezultat+="saizeci "; break;
case 7: rezultat+="saptezeci "; break;
case 8: rezultat+="optzeci "; break;
case 9: rezultat+="nouazeci "; break;
}
if(Integer.parseInt(theNR.charAt(1)+"") > 0)
{
if(Integer.parseInt(theNR.charAt(0)+"") > 0)
rezultat+="si ";
theNR=theNR.substring(1, theNR.length());
rezultat+= getnumberToString3Digits(theNR);
}
}
}
else
  if(theNR.length() == 1)
  {
switch(Integer.parseInt(theNR.charAt(0)+""))
{
case 0: rezultat+="zero "; break;
case 1: rezultat+="unu "; break;
case 2: rezultat+="doi "; break;
case 3: rezultat+="trei "; break;
case 4: rezultat+="patru "; break;
case 5: rezultat+="cinci "; break;
case 6: rezultat+="sase "; break;
case 7: rezultat+="sapte "; break;
case 8: rezultat+="opt "; break;
case 9: rezultat+="noua "; break;
}
  }
return rezultat;
}

#54
XrainX

XrainX

    Senior Member

  • Grup: Senior Members
  • Posts: 3,469
  • Înscris: 28.09.2011

 eFBIai, on 20 martie 2009 - 09:27, said:

E ok, daca s-a apucat cineva de treaba  Posted Image  sa renunte, am reusit s-o fac singur.
O zi frumoasa!
Cum ai rezolvat? Mă gândesc că dacă scriptul ar fi simplificat prin scoaterea afisarii in text a banilor ar consuma mai puține resurse.

Problema la acel script este ca daca se face o rotunjire de la 58 bani la 59 de bani tot cincizecisioptbani apare.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate