Seite 1 von 2

Zahl in Tausender unterteilen?

Verfasst: 13.04.2008 16:39
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...)

Verfasst: 13.04.2008 16:47
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.

Verfasst: 13.04.2008 17:33
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)

Verfasst: 13.04.2008 17:38
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, ".", " ")

Verfasst: 13.04.2008 17:39
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! /:->

Verfasst: 14.04.2008 00:10
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...

Verfasst: 14.04.2008 11:47
von Andreas_S
Weil der Programmieren auch etwas tun soll /:->

Code: Alles auswählen

createGame("CounterStrike")
playGame()
closeGame()

Verfasst: 14.04.2008 12:09
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

Verfasst: 14.04.2008 20:42
von AND51
*Thumbs up* euch beiden! :allright:

Hier noch ein Klassiker in PB Syntax: <)

Code: Alles auswählen

OnErrorGoto(?Bed)

Verfasst: 14.04.2008 21:16
von Andreas_S
AND51 hat geschrieben:...
Hier noch ein Klassiker in PB Syntax: <)

Code: Alles auswählen

OnErrorGoto(?Bed)
:lol: