Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

komische Buchstaben und Zahlen *G*

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 05.09.2005, 13:59    Titel: komische Buchstaben und Zahlen *G* Antworten mit Zitat

Moin,
also, ich mach grade ein sinnloses Programm, so mit Formelsammlungen und so. Also, ich bin bei der Zinsrechnung, da hab ich ein Problem. Also, da es ja um genaue Zahlen geht, hab ich den '#' Typ genommen (ich glaub das ist Double oder Long... *G*), jedenfalls, wenn ich jetzt alle Eingaben eingegeben habe (Startkapital, Laufzeit und Zinssatz), dann schreibt das Programm das Ergebnis hin und da unter dann den Rechenweg. Dann steht das z.B. folgendes:
"
Endkapital = ((Startkapital * (Zinssatz/100)) * Laufzeit) + Startkapital
Für deine Eingaben gilt: Endkapital = ((23 * (3/100)) * 65) + 23
Endkapital = ((23 * 3.e-002) * 65) + 23
"
So, also kurze Erklärung: Ich hab jetzt erstmal die Grundformel aufgeschrieben, da unter kam dann die Formel bezogen auf die Eingaben (also nur Zahlen einsetzen...), da unter fange ich dann an, so langsam die Klammer aufzulösen, also hab ich erstmal die 3 durch 100 geteilt. Jetzt steht da aber "3.e-002". Was ist das und wa hat das zu bedeuten? Und wie bekomme ich das wieder weg? Danke schonmal im Voraus.

Gruß K.I.T.T.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 05.09.2005, 16:58    Titel: Antworten mit Zitat

Also zu erst: # bedeutet DOUBLE.

So, wenn im Ausdruck e vorkommt, steht er im Exponentialformat.

=> Schreibe ihn mit PRINT USING in eine temporäre Datei, und lade ihn dann wieder
als String, damit die Umwandlung zum Exponentialformat nicht stattfindet:
Code:

function zahl$ (wert as double)

f = freefile
open "tmp.dat" for output as #f
print #f, using "#####.########"; wert
close #f

f = freefile
open "tmp.dat" for input as #f
input #f, z$
close #f

zahl$ = z$

end function


Nicht getestet, sollte aber klappen.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 10.09.2005, 20:52    Titel: Antworten mit Zitat

Moin,

alos - was soll der Umweg mit der Datei?

Man kann auch so print using schreiben.
Beispiel:
Code:
print using "##.##"; 3.2534;"##.###";3.2343;
?"huhu2"


e steht für zehn hoch
2.0 e-02 ist also 2 * 10 ^(-2) oder 2 / 10² also 0.02

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 11.09.2005, 11:13    Titel: Antworten mit Zitat

Aber dann hat man den Wert auf dem Bildschirm. Wenn man ihn später wieder anzeigen möchte,
ist es wohl einfacher,
Code:
print w$

zu schreiben, als jedes Mal mit
Code:
print using "##.###"; w%

anzukommen - alleine schon der Übersichtlichkeit willens.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 11.09.2005, 13:02    Titel: Antworten mit Zitat

hm ... man sollte in der Tat eine Funktion dafür zur Verfügung stellen ... Ich denke der Umweg über eine Datei ist nicht ganz so prall ... wenngleich eine Lösung...

mal sehen ob das auch anders geht:
Code:

function TextFormat(byval doub as double,byval afterpoint as integer ) as string
    dim st as string
    ?doub
    doub*=10^afterpoint
    ?doub
    if doub=int(doub) then
        doub+=.1
        ?"is int";doub
    else
        doub=doub*10
        ?"is no int";doub
        doub= int (doub)
        ? doub
        doub= doub/10
    end if
    ? "c|";doub
    doub/=(10^afterpoint)
    'now the variable has exactly one more then the wished number of numbers after the point - so we can take one from the back of the part to the left
    'this is necessary to provide the e stuff
    ? "d|";doub
    st=str$(doub)
    ? "e|";st
    if afterpoint >= 0 then
        TextFormat=left$(st,len(st)-1)'with comma
    else
        TextFormat=st'without comma
    end if
end function


? "10^0=";10^0
dim n as double
dim s as string
n=556.345266666
? n
? "now format to x.x"
s=TextFormat(n,1)
? s

sleep
 


das Ergebnis:
Zitat:

10^0= 1
556.345266666
now format to x.x
556.345266666
5563.45266666
is no int 55634.5266666
55634
c| 5563.4
d| 556.3399999999999
e|556.3399999999999
556.339999999999



irgendwie scheint er nicht durch 10 teilen zu können ... wenn da jemand was zu weis, bitte sagen ... Für die negativen Werte sollte man auch noch eine Bessere Lösung finden ...

CU2
Tilli
[/list][/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 11.09.2005, 14:44    Titel: Antworten mit Zitat

Warum nicht mit einer temporären Datei?
Die hat doch noch nichtmals 1KB. mit den Augen rollen

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 11.09.2005, 15:48    Titel: Antworten mit Zitat

Moin,

@jb
was ist, wenn das Stammverzeichnis nun zufällig schreibgeschützt ist? (z.B. CD)

zudem interessirt mich, warum
5563.4 / (10^1) = 556,33999999 ist - habe ich da einen dieser Pentums mit Rechenfehler bekommen? geschockt ... Eher unwahrscheinlich - es bubbert als Herz meiner Maschiene ein Athlon 2100 ... cool Wenngleich es recht nah dran ist ...

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.09.2005, 15:51    Titel: Antworten mit Zitat

Code:
TempDir$=ENVIRON$("TEMP")+"\"
OPEN TempDir$+"blabla.tmp" FOR OUTPUT AS #1
PRINT #1, "Temporäre Datei!"
CLOSE #1

lächeln
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 11.09.2005, 16:20    Titel: Antworten mit Zitat

tilli hat Folgendes geschrieben:
zudem interessirt mich, warum
5563.4 / (10^1) = 556,33999999 ist - habe ich da einen dieser Pentums mit Rechenfehler bekommen? geschockt


siehe QB-Monster-FAQ
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 11.09.2005, 16:38    Titel: Antworten mit Zitat

Dreael hat das auch mal recht gut erklärt.
Geht ziemlich ins Detail, aber wenns dich interessiert is es nur zu empfehlen.
Leider kann ich dir die URL nicht mehr sagen; aber am besten fragst du ihn einfach selbst danach.
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 11.09.2005, 16:47    Titel: Antworten mit Zitat

Moin,

@Sebastian
THX - Das sollte immer gut funken - Ich hatte schon daran gedacht, cons: oder so zu verwenden. (siehe Open-Befehl)
Frage ist aber eher, warum man die existierende Funktion nicht abgreifen kann ...

@Tomtitom
ebenfals ein Dickes TTHHXX Gnade, Gnade! ich hatte vergessen, dass 10=2*5 ist - und 1/5 ist in Binärcode ebenfalls ... hm ... Unendlich ?
Frage ist nur, warum es keine Möglichkeit gibt auf sowas zu runden .... oder bin ich da einfach zu blöd den round_about Befehl zu finden ...
Besser wohl ich baue das Komma selbst ein happy Irgendwie macht das Programm das ja auch grinsen

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 11.09.2005, 20:02    Titel: Antworten mit Zitat

Nachdem schon nach dem Artikel gefragt wird:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Gleitkommazahlen.html
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 11.09.2005, 20:36    Titel: Antworten mit Zitat

tilli hat Folgendes geschrieben:
Moin,

@Tomtitom
ebenfals ein Dickes TTHHXX Gnade, Gnade! ich hatte vergessen, dass 10=2*5 ist - und 1/5 ist in Binärcode ebenfalls ... hm ... Unendlich ?
Frage ist nur, warum es keine Möglichkeit gibt auf sowas zu runden .... oder bin ich da einfach zu blöd den round_about Befehl zu finden ...
Besser wohl ich baue das Komma selbst ein happy Irgendwie macht das Programm das ja auch grinsen

CU2
Tilli

manmanman, du strotzt ja nur so vor Ironie und Sarkasmus, vor allem zu meinen Postings neutral
Ich habe leider nicht immer den Ironiefinder an und bei deinem ursprünglichen Posting kann ja wohl keiner riechen, wie du es nun meintest.

Auf Nachkommastellen runden gibt es meines wissens nicht, da musst du dir wohl selbst was bauen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
d.j.peters
Gast





BeitragVerfasst am: 12.09.2005, 02:59    Titel: Antworten mit Zitat

K.I.T.T. hat Folgendes geschrieben:

Endkapital = ((Startkapital * (Zinssatz/100)) * Laufzeit) + Startkapital
Für deine Eingaben gilt: Endkapital = ((23 * (3/100)) * 65) + 23
Endkapital = ((23 * 3.e-002) * 65) + 23

...erstmal die 3 durch 100 geteilt. Jetzt steht da aber "3.e-002".


Alles das gleiche zwinkern

3e+2 = 2 Stellen nach rechts 300.0
3e-2 = 2 Stellen nach links 0.03

Wenn man feinere Rundungen braucht bzw. nicht drauf verzichten möchte wie Banken und andere kaufmänische Anwendungen dann benutzt man BCD Zahlen.

In BCD nimmt man die Dezimalziffern einer Zahl und wandelt diese einzeln in 4-Bit Binärdarstellung um.

Beispiele:
8 wird zu 1000
10 wird zu 0001 0000
947 wird zu 1001 0100 0111
Wenn Du es brauchen kannst dann googel mal nach BCD Spezifikation.

Grüsse Joshy
Nach oben
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 12.09.2005, 14:50    Titel: Antworten mit Zitat

Tomtitom hat Folgendes geschrieben:

manmanman, du strotzt ja nur so vor Ironie und Sarkasmus, vor allem zu meinen Postings neutral
Ich habe leider nicht immer den Ironiefinder an und bei deinem ursprünglichen Posting kann ja wohl keiner riechen, wie du es nun meintest.


also wenn ich bei'm latschen deinen fuß erwischt haben sollte: sorry - is definitiv nicht persönlich gemeint... Und meine Sarkastische Ader ... die hab' ich nunmal - ist besser als ewiger Bierernst und keiner hört mehr zu ... finde ich zumindest .... meist mache ich bei sowas einen klienen lächeln hin oder so - dadurch sollte man meieserachtens wissen, wie ich das meine. bin halt auf'm Bau groß geworden ... lächeln

Auf der anderen Seite bin ich der Meinung, dass jeder (auch du) seine Meinung sagen sollte. Und wenn man sich denn mal vertut ... egal. Is ja kein Beinbruch. Und das besser war immer schon Feind des guten AND wer keine Fehler mach, dar arbeitet auch nicht ... OGOTT geschockt - wir sind in der Sprüchekiste angekommen - ich mach mal ganz schnell Ende, das was ich sagen wollte sollte rübergekommen sein.

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 12.09.2005, 20:52    Titel: Antworten mit Zitat

schon in Ordnung lächeln
Das kleine Missverstaendnis beruht sicher auch darauf, dass du halt noch nicht lange hier bist, bzw. ich dich noch nicht kannte, haette ja auch erst sein koennen, dass du ein QBNeuling bist, aber jetzt habe ich wohl rausgekriegt, dass du so einiges auf dem Kasten hast.
Demzufolge betrachte ich dich jetzt von unten mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 13.09.2005, 11:08    Titel: Antworten mit Zitat

Moin
Tomtitom hat Folgendes geschrieben:
... aber jetzt habe ich wohl rausgekriegt, dass du so einiges auf dem Kasten hast.

grinsen THX

Ich hab's (doch) nur für Euch gemacht happy

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz