/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Tal til bogstaver
Fra : Per M. Jørgensen


Dato : 29-01-01 23:11

Hej alle,

Nu har jeg næsten givet op !

Jeg har forsøgt at skrive en routine i VB5, som på baggrund af et
indtastet tal kan skrive tallet i bogstaver, som man f.eks. gør
på checks. F.eks. skal tallet 1.313.414,33 oversættes til:
enmilliontrehundredeogtrettentusindefirehundreogfjorten 33/100 og
tallet 1.000.010,11 skal være enmillionog10 11/100.

Er der nogle tal- og programmeringsgenier, som lige kan klare den
??


--
mvh

Per

 
 
Per M. Jørgensen (29-01-2001)
Kommentar
Fra : Per M. Jørgensen


Dato : 29-01-01 23:15

Mon, 29 Jan 2001 23:11:22 +0100 skrev Per M. Jørgensen blandt
andet:

> Hej alle,
>
> Nu har jeg næsten givet op !
>
> Jeg har forsøgt at skrive en routine i VB5, som på baggrund af et
> indtastet tal kan skrive tallet i bogstaver, som man f.eks. gør
> på checks. F.eks. skal tallet 1.313.414,33 oversættes til:
> enmilliontrehundredeogtrettentusindefirehundreogfjorten 33/100 og
> tallet 1.000.010,11 skal være enmillionog10 11/100.
>
> Er der nogle tal- og programmeringsgenier, som lige kan klare den
> ??
>
>
>
Ups - tallet 1.000.010,11 skal selvfølgelig være
enmillionogti 11/100.
--
mvh

Per

Tomas Christiansen (30-01-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 30-01-01 00:50

Per M. Jørgensen skrev:
> Jeg har forsøgt at skrive en routine i VB5

Jeg har forsøgt at skrive en i VB6 - håber at den også virker i VB5.

> som på baggrund af et indtastet tal kan skrive tallet i bogstaver

Hvis du er villig til at glemme diverse og'er, som du har rundt omkring i
dine eksempler (de bør efter min mening ikke være der), burde nedenstående
eksempel kunne bruges.

Bemærk at rutinen er lige skrevet til formålet, og der derfor ikke
fuldstændig gennemtestet.

Option Explicit

Private msTalOrd() As Variant

Private Sub Form_Load()
msTalOrd = Array("", "en", "to", "tre", "fire", "fem", "seks", "syv", _
"otte", "ni", "ti", "elleve", "tolv", "tretten", "fjorten", _
"femten", "seksten", "sytten", "atten", "nitten")
MsgBox TalTilBogstaver(701413291.13)
End Sub

Private Function TalTilBogstaver(ByVal Tal As Double) As String
TalTilBogstaver = _
Bogstavering(Tal, 1000000, "million", "er") & _
Bogstavering(Tal, 1000, "tusinde", "") & _
Bogstavering(Tal, 1, "", "") & _
" " & Format(FormatNumber(100 * (Tal - Int(Tal)), 0), "00") & "/100"
End Function

Private Function Bogstavering(ByVal Tal As Double, ByVal Enhed As Long,
ByVal Navn As String, ByVal Flertalsendelse As String) As String
Dim sTalStreng As String
Dim lHundreder As Long
Dim lEnereOgTiere As Long
lHundreder = (Tal \ Enhed \ 100) Mod 10
lEnereOgTiere = (Tal \ Enhed) Mod 100
If lHundreder > 0 Then
sTalStreng = Bogstavering(lHundreder, 1, "hundrede", "")
Else
sTalStreng = ""
End If
Select Case lEnereOgTiere
Case 1 To 19
sTalStreng = sTalStreng & msTalOrd(lEnereOgTiere) & Navn
Case 20 To 99
sTalStreng = sTalStreng & msTalOrd(lEnereOgTiere \ 10) & "ti" &
msTalOrd(lEnereOgTiere Mod 10) & Navn
End Select
Bogstavering = sTalStreng & IIf((Tal \ Enhed) Mod 1000 > 1,
Flertalsendelse, "")
End Function

-------
Tomas



Per M. Jørgensen (30-01-2001)
Kommentar
Fra : Per M. Jørgensen


Dato : 30-01-01 21:11

Tue, 30 Jan 2001 00:49:51 +0100 skrev Tomas Christiansen blandt
andet:

> Per M. Jørgensen skrev:
> > Jeg har forsøgt at skrive en routine i VB5
>
> Jeg har forsøgt at skrive en i VB6 - håber at den også virker i VB5.
>
> > som på baggrund af et indtastet tal kan skrive tallet i bogstaver
>
> Hvis du er villig til at glemme diverse og'er, som du har rundt omkring i
> dine eksempler (de bør efter min mening ikke være der), burde nedenstående
> eksempel kunne bruges.
[snip]

Hej Tomas,

Tak for hjælpen og forslaget - jeg havde selv lavet noget, som
minder en del om dit forslag - dog uden at det kom til at virke
optimalt.

Nu vil jeg teste dit forslag her i weekenden og vende tilbage med
resultatet.


--
mvh

Per

Per M. Jørgensen (02-02-2001)
Kommentar
Fra : Per M. Jørgensen


Dato : 02-02-01 21:38

Tue, 30 Jan 2001 21:11:12 +0100 skrev Per M. Jørgensen blandt
andet:

> Tue, 30 Jan 2001 00:49:51 +0100 skrev Tomas Christiansen blandt
> andet:
>
> > Per M. Jørgensen skrev:
> > > Jeg har forsøgt at skrive en routine i VB5
> >
> > Jeg har forsøgt at skrive en i VB6 - håber at den også virker i VB5.
> >
> > > som på baggrund af et indtastet tal kan skrive tallet i bogstaver
> >
> > Hvis du er villig til at glemme diverse og'er, som du har rundt omkring i
> > dine eksempler (de bør efter min mening ikke være der), burde nedenstående
> > eksempel kunne bruges.
> [snip]
>
> Hej Tomas,
>
> Tak for hjælpen og forslaget - jeg havde selv lavet noget, som
> minder en del om dit forslag - dog uden at det kom til at virke
> optimalt.
>
> Nu vil jeg teste dit forslag her i weekenden og vende tilbage med
> resultatet.
>
>
>
Hej Tomas (og andre vb'ere)

Nu har jeg testet dit forslag, og det virker næsten perfekt !
Det er dog et lille problem i din kode, nemlig at lige
antal tusinde mangler ordet "tusinde" efter sig, - f.eks. tallet
600000.23 skriver dit program "sekshundrede 23/100"
Gider du lave en version 1.1 af dit program ?


--
mvh

Per

Tomas Christiansen (03-02-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 03-02-01 00:39

Per M. Jørgensen skrev:
> Nu har jeg testet dit forslag, og det virker næsten perfekt !
> Det er dog et lille problem i din kode, nemlig at lige
> antal tusinde mangler ordet "tusinde" efter sig, - f.eks. tallet
> 600000.23 skriver dit program "sekshundrede 23/100"
> Gider du lave en version 1.1 af dit program ?

Hermed v1.1 - beklager fejlen:

Option Explicit

Private msTalOrd() As Variant

Private Sub Form_Load()
msTalOrd = Array("", "en", "to", "tre", "fire", "fem", "seks", "syv", _
"otte", "ni", "ti", "elleve", "tolv", "tretten", "fjorten", _
"femten", "seksten", "sytten", "atten", "nitten")
MsgBox TalTilBogstaver(600000.23)
MsgBox TalTilBogstaver(701413291.13)
End Sub

Private Function TalTilBogstaver(ByVal Tal As Double) As String
TalTilBogstaver = _
Bogstavering(Tal, 1000000, "million", "er") & _
Bogstavering(Tal, 1000, "tusinde", "") & _
Bogstavering(Tal, 1, "", "") & _
" " & Format(FormatNumber(100 * (Tal - Int(Tal)), 0), "00") & "/100"
End Function

Private Function Bogstavering(ByVal Tal As Double, ByVal Enhed As Long,
ByVal Navn As String, ByVal Flertalsendelse As String) As String
Dim sTalStreng As String
Dim lIalt As Long
Dim lHundreder As Long
Dim lEnereOgTiere As Long
lIalt = (Tal \ Enhed) Mod 1000
lHundreder = lIalt \ 100 Mod 10
lEnereOgTiere = lIalt Mod 100
If lHundreder > 0 Then
sTalStreng = Bogstavering(lHundreder, 1, "hundrede", "")
Else
sTalStreng = ""
End If
Select Case lEnereOgTiere
Case 1 To 19
sTalStreng = sTalStreng & msTalOrd(lEnereOgTiere)
Case 20 To 99
sTalStreng = sTalStreng & msTalOrd(lEnereOgTiere \ 10) & "ti" &
msTalOrd(lEnereOgTiere Mod 10)
End Select
If lIalt = 0 Then
Bogstavering = ""
ElseIf lIalt = 1 Then
Bogstavering = sTalStreng & Navn
ElseIf lIalt > 1 Then
Bogstavering = sTalStreng & Navn & Flertalsendelse
End If
End Function

-------
Tomas



Per M. Jørgensen (03-02-2001)
Kommentar
Fra : Per M. Jørgensen


Dato : 03-02-01 20:02

Sat, 3 Feb 2001 00:38:36 +0100 skrev Tomas Christiansen blandt
andet:

> Per M. Jørgensen skrev:
> > Nu har jeg testet dit forslag, og det virker næsten perfekt !
> > Det er dog et lille problem i din kode, nemlig at lige
> > antal tusinde mangler ordet "tusinde" efter sig, - f.eks. tallet
> > 600000.23 skriver dit program "sekshundrede 23/100"
> > Gider du lave en version 1.1 af dit program ?
>
> Hermed v1.1 - beklager fejlen:
[snip]

Hej Tomas,

Så virker det bare helt perfekt !!

Tusind 00/100 tak for hjælpen



--
mvh

Per

Tomas Christiansen (03-02-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 03-02-01 23:48

Per M. Jørgensen skrev:
> Så virker det bare helt perfekt !!

Det er bare pokkers besværligt at læse... monstro man skulle lade programmet
udfylde ens selvangivelse...?

Opgaven var ganske sjov.
Jeg blev faktisk ansat for 3 år siden som udvikler til Visual Basic
client/server løsninger, men har ikke kodet én eneste linie produktionskode
endnu...
Der kom lige det ene projekt og tog min tid og det næste og det næste osv.
Så for mig er sådan en lille opgave en god måde at holde mine færdigheder
ved lige på.

-------
Tomas



Tomas Christiansen (12-02-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 12-02-01 00:10

Tomas Christiansen> Per M. Jørgensen skrev:
> udfylde ens selvangivelse...?

Selvangivelse eller ej - der er adskillige fejl i mit program!

Her kommer endnu en version, som forhåbentligvis skulle være fejlfri...

Option Explicit

Private msTalOrd() As Variant

Private Sub Form_Load()
msTalOrd = Array("", "en/et", "to", "tre", "fire", "fem", "seks", "syv",
_
"otte", "ni", "ti", "elleve", "tolv", "tretten", "fjorten", _
"femten", "seksten", "sytten", "atten", "nitten")
ShowOff 124.5
ShowOff 125.5
ShowOff 999.99
ShowOff 1000
ShowOff 600000.23
ShowOff 701413291.13
End Sub

Private Sub ShowOff(ByVal Tal As Double)
Debug.Print Tal & "=" & TalTilBogstaver(Tal)
End Sub

Private Function TalTilBogstaver(ByVal Tal As Double) As String
TalTilBogstaver = _
Bogstavering(Int(Tal) \ 1000000, "million", "er") & _
Bogstavering(Int(Tal) \ 1000, "tusinde", "", FællesKøn:=False) & _
Bogstavering(Int(Tal), "", "") & _
" " & Format(FormatNumber(100 * (Tal - Int(Tal)), 0), "00") & "/100"
End Function

Private Function Bogstavering(ByVal Tal As Long, ByVal Navn As String, ByVal
Flertalsendelse As String, Optional ByVal FællesKøn As Boolean = True) As
String
Select Case Tal
Case 0
Bogstavering = ""
Case 1
Bogstavering = TalOrd(1, FællesKøn) & Navn
Case Else
Bogstavering = Bogstavering(Tal \ 100 Mod 10, "hundrede", "",
FællesKøn:=False) & _
TalOrd(Tal Mod 100, FællesKøn) & Navn &
Flertalsendelse
End Select
End Function

Private Function TalOrd(ByVal Tal As Long, Optional ByVal FællesKøn As
Boolean = True) As String
Select Case Tal
Case 0
TalOrd = ""
Case 1
If FællesKøn Then TalOrd = "en" Else TalOrd = "et"
Case 2 To 19
TalOrd = msTalOrd(Tal)
Case 20 To 99
TalOrd = msTalOrd(Tal \ 10) & "ti" & TalOrd(Tal Mod 10,
FællesKøn)
Case Else
TalOrd = "(Værdien " & Tal & " er ikke tilladt)"
End Select
End Function

-------
Tomas



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste