| |

Fortgeschrittene ProgrammierungRe: Dezimal in Bruch | |  | Autor: Benjamin Wilger | Datum: 11.04.02 16:30 |
| Hi!
Es gibt da zwei grundsätzliche Verfahren. Das eine wandelt zuerst die Zahl in einen ZehnerBruch um: 0,53 wird zu 53/100 und dann wird solange gekürzt, bis nichts mehr geht. Dann habe ich vor ca. 2 Jahren zu Anfängen meiner Programmierung diesen Code hier geschrieben, der auch mit mit langen irrationalen Zahlen umgehen kann. Allerdings blick ich da selbst net mehr durch, was ich da geschrieben habe
Der Code braucht einen Button und zwei TextBoxen(txtFraction, txtDecimal).
Vielleicht bringt er Dir ja was:
Private Sub Command1_Click()
Dim ganze As Double, zähler As Double, nenner As Double
Dim DeziStr As Double, BruchStr As String, n As Double
Dim pGanze As String, pZähler As String, pNenner As String
Dim dummy As Variant
Dim AZeit As Double, warned As Boolean
Dim retVal As VbMsgBoxResult
On Error Resume Next
AZeit = Timer
If (Not txtDecimal.Text = "") And (txtFraction.Text = "") Then
zähler = 1
Do
If (Timer - AZeit > 3) And (Not warned) Then
retVal = MsgBox("Dies kann u.U. sehr lange dauern!" & vbCrLf & "Wollen Sie trotzdem fortfahren?", vbOKCancel + vbExclamation, App.Title)
If retVal = vbOK Then
warned = True
Else
Exit Sub
End If
End If
DeziStr = Val(Replace(txtDecimal.Text, ",", "."))
'ACHTUNG: Hier wird die Zahl von den Ganzen Zahlen getrennt:
'Bsp: 4,35 wird zu 0,35
n = DeziStr - Fix(DeziStr)
nenner = (1 / n) * zähler
ganze = DeziStr - n
If Err Then
MsgBox "Fehler:" & vbCrLf & Err.Number & " - " & Err.Description, vbCritical, App.Title
txtFraction.Text = "#"
Exit Do
End If
Debug.Print (nenner 1) = nenner, (nenner 1), nenner
Debug.Assert zähler <> 53
If nenner 1 = nenner Then
If Not zähler = nenner Then
If ganze Then
txtFraction.Text = ganze & " " & zähler & "/" & nenner
Else
txtFraction.Text = zähler & "/" & nenner
End If
Else
txtFraction.Text = 1
End If
Exit Do
End If
zähler = zähler + 1
If Err Then
MsgBox "Fehler:" & vbCrLf & Err.Number & " - " & Err.Description, vbCritical, App.Title
Exit Do
End If
Loop
ElseIf (Not txtFraction.Text = "") And (txtDecimal.Text = "") Then
dummy = Split(txtFraction.Text, "/", 2)
pNenner = Trim(dummy(1))
pZähler = dummy(0)
If Err Then
If Err.Number = 9 Then 'Index ausserhalb . . .
pNenner = txtFraction.Text
pZähler = txtFraction.Text
End If
End If
If InStr(1, pZähler, " ") Then
dummy = Split(pZähler, " ", 2)
pGanze = Trim(dummy(0))
pZähler = Trim(dummy(1))
End If
ganze = Val(pGanze)
zähler = Val(pZähler)
nenner = Val(pNenner)
If nenner = 0 Then
txtDecimal.Text = ganze
Else
txtDecimal.Text = (zähler / nenner) + ganze
End If
' txtFraction.Text = "" 'ganze & " " & zähler & "/" & nenner
' Command1.Value = True
Else
MsgBox "Fehler:" & vbCrLf & "Felder sind nicht richtig ausgefüllt! Es muss EIN Feld leer sein.", vbExclamation, App.Title
End If
End Sub |  |
 Dezimal in Bruch | 36 | D4rknigh7 | 11.04.02 15:47 |   Re: Dezimal in Bruch | 35 | Benjamin Wilger | 11.04.02 16:30 |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) sevOutBar 4.0 
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|