von Stephan » Mi, 11.08.2021 22:02
z.B. hier ist ein fertiger VBA-Code:
http://www.arstechnica.de/index.html?na ... a0033.html
in MS Excel läuft der prima, aber in OO/LO liefert er FEhler, also muss man ihn etwas anpassen und der Einfachheithalber ein "On Error Resume Next" ergänzen:
Code: Alles auswählen
Sub start
Msgbox DezimalZahlnBruch(0.058)
End Sub
Function DezimalZahlnBruch(DezimalZahl As Double)
Dim A, Approx As Double
Dim Z0 As Long, Z1 As Long, Z2 As Long
Dim N0 As Long, N1 As Long, N2 As Long
Dim X0 As Double, X1 As Double, X2 As Double
On Error Resume Next
A = Int(DezimalZahl)
Z0 = 0: Z1 = 1
N0 = 1: N1 = 0
X0 = 1: X1 = (DezimalZahl - A)
Do
Z2 = A * Z1 + Z0: Z0 = Z1: Z1 = Z2
N2 = A * N1 + N0: N0 = N1: N1 = N2
A = Int(X0 / X1)
X2 = X0 - A * X1: X0 = X1: X1 = X2
Approx = Z2 / N2
Loop Until (N2 = 0 Or Approx = DezimalZahl)
DezimalZahlnBruch = "Bruch ist: " & Z2 & "/" & N2
End Function
Gruß
Stephan
z.B. hier ist ein fertiger VBA-Code:
http://www.arstechnica.de/index.html?name=http://www.arstechnica.de/computer/msoffice/vba/vba0033.html
in MS Excel läuft der prima, aber in OO/LO liefert er FEhler, also muss man ihn etwas anpassen und der Einfachheithalber ein "On Error Resume Next" ergänzen:
[code]Sub start
Msgbox DezimalZahlnBruch(0.058)
End Sub
Function DezimalZahlnBruch(DezimalZahl As Double)
Dim A, Approx As Double
Dim Z0 As Long, Z1 As Long, Z2 As Long
Dim N0 As Long, N1 As Long, N2 As Long
Dim X0 As Double, X1 As Double, X2 As Double
On Error Resume Next
A = Int(DezimalZahl)
Z0 = 0: Z1 = 1
N0 = 1: N1 = 0
X0 = 1: X1 = (DezimalZahl - A)
Do
Z2 = A * Z1 + Z0: Z0 = Z1: Z1 = Z2
N2 = A * N1 + N0: N0 = N1: N1 = N2
A = Int(X0 / X1)
X2 = X0 - A * X1: X0 = X1: X1 = X2
Approx = Z2 / N2
Loop Until (N2 = 0 Or Approx = DezimalZahl)
DezimalZahlnBruch = "Bruch ist: " & Z2 & "/" & N2
End Function[/code]
Gruß
Stephan