Zahl in Tausender unterteilen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Zahl in Tausender unterteilen?

Beitrag von KeyKon »

Also z.B:
1234567 -> 1.234.567
45678 -> 45.678

Wollte mal Fragen ob es da einen Befehl dafür in PureBasic gibt...

Bisher hab ich das immer so gemacht:

Code: Alles auswählen

Procedure.s  StrP(zahl.l)
  
  output.s = ""
  front.b = 1
  zahls.s = Str(zahl)
  
  Select Len(zahls)%3
    Case 1
      front = 2
      output = Left(zahls,1)+"."
    Case 2
      front = 3
      output = Left(zahls,2)+"."
  EndSelect
  
  For x = 0 To Len(zahls)/3-1
    output + Mid(zahls,front+3*x,3)+"."
    Debug output 
  Next
  
  output = Left(output,Len(output)-1)
    
  ProcedureReturn output


EndProcedure
Geht das evtl. auch einfacher/schneller?
(Sorry wenns das Thema schonmal gab, aber ich wusste nicht mit welchen Begriffen ich suchen sollte...)
(\/) (°,,,°) (\/)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, ich würde das von hinten nach vorn in einen zweiten string kopieren,
immer drei zeichen auf einmal und dann die stopper dazwischen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Code: Alles auswählen

Procedure.s _(num)
	Protected last, count, result.s
	
	Repeat
		last = num % 10
		
		If count % 3 = 0 And count <> 0
			result = "." + result
		EndIf
		result = Chr(last + 48) + result
		
		num / 10
		count + 1
	Until num = 0
	
	ProcedureReturn result
EndProcedure


Debug _(1234567890)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ich habe auch n Variante die ein bisschen Vielseitiger ist:

Code: Alles auswählen

Procedure.s MyStr(Value.d, Dec=-1, Komma$=".", Tausend$="")
 If Dec = -1
  String$ = StrD(Value)
 Else
  String$ = StrD(Value, Dec)
 EndIf
 String$ = ReplaceString(String$, ".", Komma$)
 If Tausend$
  Pos = FindString(String$, Komma$, 1)
  If Not Pos : Pos = Len(String$)+1 : EndIf
  For n = Pos-4 To 1 Step -3
   String$ = Left(String$,n)+Tausend$+Mid(String$,n+1)
  Next n
 EndIf
 ProcedureReturn String$
EndProcedure

Zahl1.l = 1000000
Debug MyStr(Zahl1, 10, ",", "'")
Zahl2.q = 70000000000
Debug MyStr(Zahl2, 0, ",", ".")
Zahl3.d = #PI*1000000
Debug MyStr(Zahl3, 1, ".", " ")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

@ Threadstarter:

Eine einfache Suche nach "Tausendertrennzeichen" hätte meinen Thread zu Tage gefördert:
http://www.purebasic.fr/german/viewtopi ... 51&start=0

Bitte erst suchen! /:->
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

lol sry, ich hab nich nach Tausendertrennzeichen sondern nach Tausenderunterteilung etc. gesucht, sry, mir is wie gesagt kein passender Suchbegriff eingefallen...

Warum is so eine Funktion eig nich in PB integriert? Wär doch ma ganz praktisch...
(\/) (°,,,°) (\/)
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Weil der Programmieren auch etwas tun soll /:->

Code: Alles auswählen

createGame("CounterStrike")
playGame()
closeGame()
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

wenn dann so:

Code: Alles auswählen

If LoadLinkedList(Mensch(), "Universum/Milchstrasse/Unser Sonnensystem/Erde.Planet")
 ForEach Mensch()
  If CreateGame(Mensch()\Wunsch\Game)
   Mensch()\Gefuehlszustand = #Gluecklich
  EndIf
 Next
EndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

*Thumbs up* euch beiden! :allright:

Hier noch ein Klassiker in PB Syntax: <)

Code: Alles auswählen

OnErrorGoto(?Bed)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

AND51 hat geschrieben:...
Hier noch ein Klassiker in PB Syntax: <)

Code: Alles auswählen

OnErrorGoto(?Bed)
:lol:
Antworten