Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Runden in FreeBASIC

von RedakteurytwinkySeite 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"..

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 09.10.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 04.09.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen