Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Geladin
Anmeldungsdatum: 23.05.2019 Beiträge: 12
|
Verfasst am: 17.04.2022, 18:14 Titel: Zahlen formatieren. |
|
|
Ich habe eine Frage zum Formatieren von Zahlen.
Ich möchte folgendes, vielleicht gehe ich die Sache auch völlig falsch an...
Ich habe die große Lust, extrem große Zahlen zu schreiben. Also wirklich groß.
Meine Idee war es, mehrere Integer zu nutzen und diese hintereinander zu schreiben.
Beispiel:
Code: | IF zahl1 > 0 THEN
IF zahl1 > 0 AND zahl1 < 10 THEN
LOCATE 1, 78
ELSEIF zahl1 > 9 AND zahl1 < 100 THEN
LOCATE 1, 77
ELSEIF zahl1 > 99 AND zahl1 < 1000 THEN
LOCATE 1, 76
END IF
PRINT zahl1
END IF
IF zahl2 > 0 THEN
IF zahl2 > 0 AND zahl2 < 10 THEN
LOCATE 1, 74
ELSEIF zahl2 > 9 AND zahl2 < 100 THEN
LOCATE 1, 73
ELSEIF zahl2 > 99 AND zahl2 < 1000 THEN
LOCATE 1, 72
END IF
PRINT zahl2
LOCATE 1, 76
PRINT "."
END IF |
und folgend
Das funktioniert soweit super. Wenn zahl1 = oder > 1000, dann zahl2 + 1 und zahl1 - 1000
Jetzt habe ich das Problem, wenn die Gesamtzahl 1.050 sein soll...
Denn wenn zahl1 50 ist, wird sie nur 2-stellig angezeigt. Dann steht da 1._50 (_ = Leerschritt)...
Wie kann ich eine führende 0 zur 50 schreiben. Oder gibt es eine "elegante Lösung"?
Bin halt Anfänger...[/code] |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1255 Wohnort: Ruhrpott
|
Verfasst am: 17.04.2022, 19:59 Titel: |
|
|
Mein Vorschlag:
Code: | zahl1 = 1
zahl2 = 50
Print Right$("0000" + Str$(zahl1), 4) + "." + Right$("0000" + Str$(zahl2), 4) |
ansonsten gibt es zum Formatieren von Ausgaben noch PRINT USING.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Geladin
Anmeldungsdatum: 23.05.2019 Beiträge: 12
|
Verfasst am: 17.04.2022, 21:02 Titel: |
|
|
Danke, werde ich morgen direkt mal ausprobieren... |
|
Nach oben |
|
|
Geladin
Anmeldungsdatum: 23.05.2019 Beiträge: 12
|
Verfasst am: 18.04.2022, 07:09 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Mein Vorschlag:
Code: | zahl1 = 1
zahl2 = 50
Print Right$("0000" + Str$(zahl1), 4) + "." + Right$("0000" + Str$(zahl2), 4) |
ansonsten gibt es zum Formatieren von Ausgaben noch PRINT USING.
Gruß
grindstone |
Wenn ich den 1. Code nutze (wobei ich 0000 / 4 nicht ganz verstehe)
dann bekomme ich als Ausgabe
00_1.0_50 (_ = Leerzeichen)
Benutze ich den Code und ersetze 0000 mit 000 und 4 durch 3 (will ja nur 3 Stellen pro Zahl) dann erhalte ich "0_1._50"
Ich denke, der Grund liegt darin, dass man den Wert 1 und 50 in den String schreibt und dabei ein führendes Leerzeichen eingesetzt wird.
String 000 + "50" = _50
String 000 + "1" = 0_1
Ich versuche es mal mit PRINT USING
Trotzdem Danke für deine Mühen |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4672 Wohnort: ~/
|
Verfasst am: 18.04.2022, 11:22 Titel: |
|
|
STR$(zahl) hängt in QBasic vorne das Vorzeichen der Zahl an, bzw. bei positiven Zahlen ein Leerzeichen. Du könntest mal LTRIM$(STR$(zahl)) probieren, um das Leerzeichen wieder abzuschneiden.
Einfacher ist da sicherlich PRINT USING. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1255 Wohnort: Ruhrpott
|
Verfasst am: 18.04.2022, 15:23 Titel: |
|
|
Stimmt, ich hatte den Programmschnippsel mit FB getestet und dann zum Posten nur die Suffixe drangehängt. Mein Fehler, Entschuldigung.
Geladin hat Folgendes geschrieben: | Benutze ich den Code und ersetze 0000 mit 000 und 4 durch 3 (will ja nur 3 Stellen pro Zahl)... | Stimmt zum Teil. "000" reicht, weil die Zahl ja mindestens eine Stelle hat, aber die 4 muß bleiben.
So funktioniert es (diesmal mit original QB getestest, und ich habe noch eine Vornullenunterdrückung dazugebastelt): Code: | zahl1 = 1
zahl2 = 50
z$ = Right$("000" + LTrim$(Str$(zahl1)), 4) + "." + Right$("000" + LTrim$(Str$(zahl2)), 4)
x% = 1
Do While Mid$(z$, x%, 1) = "0"
Mid$(z$, x%, 1) = " "
x% = x% + 1
Loop
Print z$ |
Gruß
grindstone
EDIT:
Ich habe mal aus Neugierde versucht, das Ganze mit PRINT USING zu realisieren, es funktioniert nicht. Überlange Zahlen können nicht dargestellt werden, und als führende Füllzeichen stehen nur Leerzeichen oder Sternchen zur Verfügung. _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4672 Wohnort: ~/
|
Verfasst am: 18.04.2022, 18:08 Titel: |
|
|
Da dachte ich gerade, dass diese Aufgabe auch ein guter Anwendungsbereich für den ziemlich seltsamen Befehl RSET wäre, aber nein - auch der füllt ausschließlich mit Leerzeichen auf. Zumindest in FreeBASIC. Oder lässt es sich in QBasic flexibler einsetzen? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1255 Wohnort: Ruhrpott
|
Verfasst am: 19.04.2022, 15:40 Titel: |
|
|
nemored hat Folgendes geschrieben: | Oder lässt es sich in QBasic flexibler einsetzen? | Nein, es ist die gleiche Funktion.
Hier noch eine verbesserte Version der Vornullenunterdrückung, die sich auch von einem Wert von 0 nicht aus dem Konzept bringen lässt. Sie wandelt von links nach rechts alle Zeichen in Leerzeichen (oder jedes andere gewünschte Zeichen) um, bis sie auf eine Ziffer <> 0 trifft. Code: | For x% = 1 To Len(z$) - 1
If InStr("123456789", Mid$(z$, x%, 1)) Then
Exit For
Else
Mid$(z$, x%, 1) = " "
EndIf
Next |
_________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Geladin
Anmeldungsdatum: 23.05.2019 Beiträge: 12
|
Verfasst am: 21.04.2022, 06:46 Titel: |
|
|
Vielen lieben Dank für eure Tipps |
|
Nach oben |
|
|
|