|
| 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
| |
|
|