Tutorial
Runden in FreeBASIC
von ytwinky | Seite 2 von 4 |
Klar doch, wir wissen ja(Referenz rulez..), daß wir Strings formatiert ausgeben können. Print Using".." macht sowas, aber das Ergebnis wird direkt auf dem Bildschirm ausgegeben und es wäre zwar möglich, mit der Screen-Funktion die einzelnen Zeichen auszulesen und in einer Variablen zu speichern, aber das ist ein sehr umständlicher, um nicht zu sagen mühevoller, Weg. Wir müßten die aktuelle Bildschirm-Position ermitteln, die Länge des Ausgabestrings, in einer Schleife die Bildschirm-Werte einlesen und speichern.
Dim As Integer i, Zeile, Spalte, Nachkomma=4
Dim As String p, ch, pf="#." &String(Nachkomma, "#")
Spalte=Pos()
Zeile=CsrLin
Print Using pf;4.0*Atn(1.0)
p=""
For i=0 To Len(Pf)-1
p+=Chr(Screen(Zeile, Spalte+i, 0))
Next
Print p
Sleep
Aber da war doch noch..
Richtig, der Befehl Format() aus vbcompat.bi. Dieser Befehl formatiert eine Zahl nach bestimmten Angaben und kann den Wert nicht nur auf dem Schirm ausgeben, sondern ihn auch einer Variablen zuweisen. Dummerweise benutzt Format() aber das eingestellte Ausgabeformat, um die Zahl gemäß den Einstellungen des Benutzers darzustellen, d.h. aus dem Dezimalpunkt von FB wird unter Umständen ein Dezimalkomma auf deutschen Bildschirmen. Das läßt sich aber nach der Formatierung wieder ändern:
#include "vbcompat.bi"
Function Round(Variable As Double, nk As Integer) As Double
Dim As String s=Format(Variable, "##." &String(nk, "0")) 'egal, ob nach dem ',' 0 oder # steht
Dim As Integer i=InStr(s, ",") 'Sollte wirklich ein Komma im String sein?
If i Then s[i-1]+=2 '..dann aber ändern xD
Return Val(s)
End Function
Print "Pi=" &Round(4*Atn(1), 4) 'na, das sieht bekannt aus..
Print "Pi=";:Print Using"#.######";Round(4.0*Atn(1.0), 4) '"endliches" Pi^^
Sleep
Hier ist zu beachten, daß die Datei "vbcompat.bi" eingebunden werden muß.
Gibt es noch eine Möglichkeit?
Nun, Radio Eriwan würde sagen:"Im Prinzip ja, aber"..
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|