|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2006
Messaggi: 194
|
convertire un numero in lettere
Mi servirebbe sapere conme convertire un numero in lettere ad esempio 11 con undici. uso il vb6
|
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Io comunque avevo fatto una funzione in "C" che convertiva appunto un numero nella sua forma "letterale". L'algoritmo non è neanche particolarmente complicato, almeno per quanto riguarda l'italiano è semplice.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Apr 2006
Messaggi: 194
|
Quote:
|
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Ti riporto un codice che avevo fatto tantissimi anni fa in vb6, assolutamente non ottimizzato ma perfettamente funzionante sia con numeri grandi grandi che con la virgola; restituisce una stringa.
Codice:
Public Function NumeroInLettere(NrAnalizzato As String, Optional Valuta As String, Optional Formato As Byte) As String 'NrAnalizzato = Numero da convertire 'Valuta = lire, euro, £, € oppure vuoto 'Formato= 0 tutto minuscolo, 1 tutto maiuscolo, '2 primo carattere maiuscolo se omesso è uguale a 0 Dim Miliardi, Milioni, Migliaia, Centinaia, Centesimi, inLettere NrAnalizzato = Right("000000000000" & Format(NrAnalizzato, "###0.00"), 15) NrAnalizzato = Left(NrAnalizzato, 12) & "0" & Right(NrAnalizzato, 2) If Val(Mid(NrAnalizzato, 1, 3)) = 1 Then Miliardi = "unmiliardo" If Val(Mid(NrAnalizzato, 1, 3)) > 1 Then Miliardi = DefinisciNumero(Mid(NrAnalizzato, 1, 3)) & "miliardi" If Val(Mid(NrAnalizzato, 4, 3)) = 1 Then Milioni = "unmilione" If Val(Mid(NrAnalizzato, 4, 3)) > 1 Then Milioni = DefinisciNumero(Mid(NrAnalizzato, 4, 3)) & "milioni" If Val(Mid(NrAnalizzato, 7, 3)) = 1 Then Migliaia = "mille" If Val(Mid(NrAnalizzato, 7, 3)) > 1 Then Migliaia = DefinisciNumero(Mid(NrAnalizzato, 7, 3)) & "mila" If Val(Mid(NrAnalizzato, 10, 3)) = 1 Then Centinaia = "cento" If Val(Mid(NrAnalizzato, 10, 3)) > 1 Then Centinaia = DefinisciNumero(Mid(NrAnalizzato, 10, 3)) If Val(Mid(NrAnalizzato, 13, 3)) = 1 Then Centesimi = "uncentesimo" If Val(Mid(NrAnalizzato, 13, 3)) > 1 Then Centesimi = DefinisciNumero(Mid(NrAnalizzato, 13, 3)) & "centesimi" If Centinaia = "" And Migliaia = "" And Valuta <> "" Then Valuta = "di" & Valuta inLettere = Miliardi & Milioni & Migliaia & Centinaia & Valuta & Centesimi If Formato = 0 Then NumeroInLettere = StrConv(inLettere, vbLowerCase) If Formato = 1 Then NumeroInLettere = StrConv(inLettere, vbUpperCase) If Formato = 2 Then NumeroInLettere = StrConv(inLettere, vbProperCase) End Function Function DefinisciNumero(Numero000 As String) As String Dim numero0 Dim nrCento, nrDieci, stNumero0 nrCento = Val(Mid(Numero000, 1, 1)) nrDieci = Val(Mid(Numero000, 2, 2)) numero0 = Array("zero", "uno", "due", "tre", "quattro", "cinque", "sei", "sette", _ "otto", "nove", "dieci", "undici", "dodici", "tredici", "quattordici", _ "quindici", "sedici", "diciassette", "diciotto", "diciannove", "venti", _ "ventuno", "ventidue", "ventitre", _ "ventiquattro", "venticinque", "ventisei", "ventisette", "ventotto", "ventinove", _ "trenta", "trentuno", "trentadue", "trentatre", "trentaquattro", "trentacinque", _ "trentasei", "trentasette", "trentotto", "trentanove", "quaranta", "quarantuno", _ "quarantadue", "quarantatre", "quarantaquattro", "quarantacinque", _ "quarantasei", "quarantasette", "quarantotto", "quarantanove", "cinquanta", "cinquantuno", _ "cinquantadue", "cinquantatre", "cinquantaquattro", "cinquantacinque", "cinquantasei", "cinquantasette", _ "cinquantotto", "cinquantanove", "sessanta", "sessantuno", "sessantadue", "sessantatre", _ "sessantaquattro", "sessantacinque", _ "sessantasei", "sessantasette", "sessantotto", _ "sessantanove", "settanta", "settantuno", _ "settantadue", "settantatre", _ "settantaquattro", "settantacinque", _ "settantasei", "settantasette", "settantotto", _ "settantanove", "ottanta", "ottantuno", _ "ottantadue", "ottantatre", "ottantaquattro", _ "ottantacinque", "ottantasei", "ottantasette", _ "ottantotto", "ottantanove", "novanta", _ "novantuno", "novantadue", "novantatre", _ "novantaquattro", "novantacinque", _ "novantasei", "novantasette", "novantotto", _ "novantanove") If nrCento = 1 Then stNumero0 = "cento" If nrCento > 1 Then stNumero0 = numero0(nrCento) & "cento" If nrDieci > 0 Then stNumero0 = stNumero0 & numero0(nrDieci) DefinisciNumero = stNumero0 End Function Codice:
Private Sub Command1_Click() Text1.Text = NumeroInLettere(123456) End Sub
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Ecco, questo l' ho trovato in un altro progetto che avevo fatto tanto tempo fa ... ed è più ottimizzato e corto, ma non supporta i numeri decimali.
Codice:
Function Lettere(wknumero) As String Dim WkCentinaia, WkMigliaia, WkMilioni, WkMiliardi, WkStringa As String Dim pass As Byte wknumero = Str$(Int(wknumero)) wknumero = Space(12 - Len(wknumero)) + wknumero WkMiliardi = Left$(wknumero, 3) WkMilioni = Mid$(wknumero, 4, 3) WkMigliaia = Mid$(wknumero, 7, 3) WkCentinaia = Mid$(wknumero, 10, 3) WkStringa = "" For pass = 1 To 4 Select Case pass Case Is = 1 If Val(WkMiliardi) = 1 Then WkStringa = WkStringa + "unmiliardo" End If If Val(WkMiliardi) > 1 Then WkStringa = WkStringa + NumTrd(WkMiliardi) + "miliardi" End If Case Is = 2 If Val(WkMilioni) = 1 Then WkStringa = WkStringa + "unmilione" End If If Val(WkMilioni) > 1 Then WkStringa = WkStringa + NumTrd(WkMilioni) + "milioni" End If Case Is = 3 If Val(WkMigliaia) = 1 Then WkStringa = WkStringa + "mille" End If If Val(WkMigliaia) > 1 Then WkStringa = WkStringa + NumTrd(WkMigliaia) + "mila" End If Case Is = 4 If Val(WkCentinaia) > 0 Then WkStringa = WkStringa + NumTrd(WkCentinaia) End If If Val(WkCentinaia) = 0 Then If WkStringa = "" Then WkStringa = "zero" End If End Select Next Lettere = WkStringa End Function Function cifranum(item) As String Dim cifra(27) As String cifra(1) = "uno" cifra(2) = "due" cifra(3) = "tre" cifra(4) = "quattro" cifra(5) = "cinque" cifra(6) = "sei" cifra(7) = "sette" cifra(8) = "otto" cifra(9) = "nove" cifra(10) = "dieci" cifra(11) = "undici" cifra(12) = "dodici" cifra(13) = "tredici" cifra(14) = "quattordici" cifra(15) = "quindici" cifra(16) = "sedici" cifra(17) = "diciassette" cifra(18) = "diciotto" cifra(19) = "diciannove" cifra(20) = "venti" cifra(21) = "trenta" cifra(22) = "quaranta" cifra(23) = "cinquanta" cifra(24) = "sessanta" cifra(25) = "settanta" cifra(26) = "ottanta" cifra(27) = "novanta" cifranum = cifra(item) End Function Function GetCifra(item) As String Dim CurrItem As String If item <= 20 Then CurrItem = cifranum(item) Else CurrItem = cifranum((item - 30) / 10 + 21) End If GetCifra = CurrItem End Function Function NumTrd(WkNum) Dim WkCif1, WkCif2, WkCif3 As Integer Dim WkCif As String WkNum = Space(3 - Len(WkNum)) + WkNum WkCif = "" WkCif1 = Val(Left(WkNum, 1)) WkCif2 = Val(Mid$(WkNum, 2, 1)) WkCif3 = Val(Mid$(WkNum, 3, 1)) If WkCif1 = 1 Then WkCif = "cento" End If If WkCif1 > 1 Then WkCif = GetCifra(WkCif1) + "cento" End If If WkCif2 > 1 And (WkCif3 = 1 Or WkCif3 = 8) Then WkCif = WkCif + Left(GetCifra(WkCif2 * 10), Len(GetCifra(WkCif2 * 10)) - 1) ElseIf WkCif2 > 1 And WkCif3 > 1 Then WkCif = WkCif + GetCifra(WkCif2 * 10) ElseIf WkCif2 > 0 Then WkCif = WkCif + GetCifra(WkCif2 * 10 + WkCif3) WkCif3 = 0 End If If WkCif3 > 0 Then WkCif = WkCif + GetCifra(WkCif3) End If NumTrd = WkCif End Function Private Sub Command1_Click() Text1.Text = Lettere(1234567) End Sub
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Apr 2006
Messaggi: 194
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Il codice lunghissimo del mio 1° post invece funzia anche con la virgola ...
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Apr 2006
Messaggi: 194
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Ops, è vero ... solo 1 mette cento, poi dal 2 in poi funziona bene ... non me ne ero mai accorto
![]()
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
|
interesserebbe anche a me questa cosa, ma sono un supernubbio, come faccio a provare il tuo programma? cioe dove metto il codice?
![]()
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW \_\_\_\_\_DrSpeed_/_/_/_/_/
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Beh, l' ultimo codice che ho postato:
Codice:
Function Lettere(wknumero) As String Dim WkCentinaia, WkMigliaia, WkMilioni, WkMiliardi, WkStringa As String Dim pass As Byte wknumero = Str$(Int(wknumero)) wknumero = Space(12 - Len(wknumero)) + wknumero WkMiliardi = Left$(wknumero, 3) WkMilioni = Mid$(wknumero, 4, 3) WkMigliaia = Mid$(wknumero, 7, 3) WkCentinaia = Mid$(wknumero, 10, 3) WkStringa = "" For pass = 1 To 4 Select Case pass Case Is = 1 If Val(WkMiliardi) = 1 Then WkStringa = WkStringa + "unmiliardo" End If If Val(WkMiliardi) > 1 Then WkStringa = WkStringa + NumTrd(WkMiliardi) + "miliardi" End If Case Is = 2 If Val(WkMilioni) = 1 Then WkStringa = WkStringa + "unmilione" End If If Val(WkMilioni) > 1 Then WkStringa = WkStringa + NumTrd(WkMilioni) + "milioni" End If Case Is = 3 If Val(WkMigliaia) = 1 Then WkStringa = WkStringa + "mille" End If If Val(WkMigliaia) > 1 Then WkStringa = WkStringa + NumTrd(WkMigliaia) + "mila" End If Case Is = 4 If Val(WkCentinaia) > 0 Then WkStringa = WkStringa + NumTrd(WkCentinaia) End If If Val(WkCentinaia) = 0 Then If WkStringa = "" Then WkStringa = "zero" End If End Select Next Lettere = WkStringa End Function Function cifranum(item) As String Dim cifra(27) As String cifra(1) = "uno" cifra(2) = "due" cifra(3) = "tre" cifra(4) = "quattro" cifra(5) = "cinque" cifra(6) = "sei" cifra(7) = "sette" cifra(8) = "otto" cifra(9) = "nove" cifra(10) = "dieci" cifra(11) = "undici" cifra(12) = "dodici" cifra(13) = "tredici" cifra(14) = "quattordici" cifra(15) = "quindici" cifra(16) = "sedici" cifra(17) = "diciassette" cifra(18) = "diciotto" cifra(19) = "diciannove" cifra(20) = "venti" cifra(21) = "trenta" cifra(22) = "quaranta" cifra(23) = "cinquanta" cifra(24) = "sessanta" cifra(25) = "settanta" cifra(26) = "ottanta" cifra(27) = "novanta" cifranum = cifra(item) End Function Function GetCifra(item) As String Dim CurrItem As String If item <= 20 Then CurrItem = cifranum(item) Else CurrItem = cifranum((item - 30) / 10 + 21) End If GetCifra = CurrItem End Function Function NumTrd(WkNum) Dim WkCif1, WkCif2, WkCif3 As Integer Dim WkCif As String WkNum = Space(3 - Len(WkNum)) + WkNum WkCif = "" WkCif1 = Val(Left(WkNum, 1)) WkCif2 = Val(Mid$(WkNum, 2, 1)) WkCif3 = Val(Mid$(WkNum, 3, 1)) If WkCif1 = 1 Then WkCif = "cento" End If If WkCif1 > 1 Then WkCif = GetCifra(WkCif1) + "cento" End If If WkCif2 > 1 And (WkCif3 = 1 Or WkCif3 = 8) Then WkCif = WkCif + Left(GetCifra(WkCif2 * 10), Len(GetCifra(WkCif2 * 10)) - 1) ElseIf WkCif2 > 1 And WkCif3 > 1 Then WkCif = WkCif + GetCifra(WkCif2 * 10) ElseIf WkCif2 > 0 Then WkCif = WkCif + GetCifra(WkCif2 * 10 + WkCif3) WkCif3 = 0 End If If WkCif3 > 0 Then WkCif = WkCif + GetCifra(WkCif3) End If NumTrd = WkCif End Function Private Sub Command1_Click() Text1.Text = Lettere(1234567) End Sub
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
|
scusami, cose un form?
![]()
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW \_\_\_\_\_DrSpeed_/_/_/_/_/
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
![]() ![]() Cos'è un form? ![]() Spero tu mi stia prendendo in giro ... o forse no ... ![]() Comunque un form è la maschera del programma, la finestra del programma ... Quando crei un nuovo progetto in VB ti ritrovi il form vuoto davanti (con solamente l'icona, il titolo standard ed i pulsantini di riduzione e massimizzazione). Fa doppio click sopra e passi nella pagina in cui puoi inserire il codice relativo al form ... cancella le scritte preesistenti (Private Sub Form_Load ....) ed incolla il codice. Ora torna alla visualizzazione grafica e disegnaci un pulsante ed una textbox ... L' ultima riga di codice è quella da modificare: Text1.Text = Lettere(1234567) Se ad esempio vuoi inserire tu da programma il valore in una seconda textbox, basta che disegni una seconda textbox (lasci i nomi standard, ovvero Text2) e cambi quella riga con questa: Text1.Text = Lettere(val(Text2.Text))
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino Ultima modifica di mynos79 : 22-06-2006 alle 20:55. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
|
pultroppo nn ti sto prendendo in giro
![]() ora devo capire cos'e un VB, ma cerco con google, grazie mille per la disponibilita ![]()
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW \_\_\_\_\_DrSpeed_/_/_/_/_/
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
|
visual basic, ottimo, ma dove trovo una console di visual basic? mi ricordo che sui vecchi 386-486 bastava scrivere da dos visual basic ma su questi nuovi pc con windows xp nn succede nulla mi sembra
![]() ![]()
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW \_\_\_\_\_DrSpeed_/_/_/_/_/
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Quote:
![]() ![]() Comunque anche in dos non c'era preinstallato il Visual Basic, ma solamente il Basic o GwBasic ... ![]()
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Quote:
![]() ![]() Il GwBasic era una versione leggermente diversa dell' Ibm o Olivetti, non ricordo.
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
|
si si mi ricordo anchio il QBasic
![]() ![]()
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW \_\_\_\_\_DrSpeed_/_/_/_/_/
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:51.