Seite 5 von 6
					
				
				Verfasst: 12.10.2006 14:04
				von Karl
				Ich habe hier seltsame Fehler:
Code: Alles auswählen
Procedure.s ByteHeinz(wert.q)
   Protected anzahl.l, swert.s, temp.d, lokwert.q
   
   lokwert = wert
   anzahl = Int(Log(lokwert)/Log(2))
   Debug anzahl
   anzahl = anzahl - (anzahl % 10)
   Debug anzahl
   Debug lokwert
   Debug Pow(2, anzahl)
   temp = lokwert/Pow(2, anzahl)
   Debug temp
   swert = StrD(temp, 1)
   Select anzahl
    Case 10
      swert + " KB"
    Case 20
      swert + " MB"
    Case 30
      swert + " GB"
    Case 40
      swert + " TB"
    Case 50
      swert + " PB"
    Case 60
      swert + " EB"
   EndSelect
   ProcedureReturn swert
EndProcedure
Debug ByteHeinz(100000)
Das Kopieren der Quadwerte schlägt fehl. Die Rückgabe funktioniert nicht. Ist das bei euch auch so?
Gruß Karl
 
			 
			
					
				
				Verfasst: 12.10.2006 14:55
				von NicTheQuick
				Bei mir funktioniert deine Version. Aber warum machst du nicht gleich 
Log(1024) statt Log(2)?
			 
			
					
				
				Verfasst: 12.10.2006 15:01
				von #NULL
				ich erhalte den gleichen fehler wie karl, geht also bei mir nicht.
			 
			
					
				
				Verfasst: 12.10.2006 15:11
				von ts-soft
				Bei mir gehts auch nicht
@NTQ
So wie es aussieht, über mehrere Threads beobachtet, benutzt Du eine 
andere PB4 Version. Vielleicht mal neuladen, installieren, updates von der 
Beta-Seite, damit Du dieselben Fehler hast, wie die anderen  
 
Gruß
Thomas
 
			 
			
					
				
				Verfasst: 03.11.2006 21:24
				von AND51
				habe den Code nochmals verkürzt:
Code: Alles auswählen
Procedure.s byterechner(byte.q, NbDecimals.b=1)
	Protected unit.b=Round(Log(byte)/Log(1024), 0) 
	ProcedureReturn StrD(byte/Pow(1024, unit), NbDecimals*(unit And 1))+" "+StringField("Byte,KB,MB,GB,TB,PB,EB", unit+1, ",")
EndProcedure
Der Trck: Die eine protected Variable vom Typ Double (.d) ist weggefallen, stattdessen wird der Parameter byte.q direkt überall eingesetzt. Funktioniert mit PB 4.01 (das Update).
 
			 
			
					
				
				Verfasst: 03.04.2007 11:15
				von AND51
				Welcher Heini hat sich eigentlich das 
Round() hinzugedichtet? 
 
Da ich abrunde, brauche ich das eh nicht, Beweis:
Bei der Zuweisung eines Floats zu einer Integer-Variablen geht der Nachkommateil automatisch flöten.
Habe die Procedure nochmals verbessert. Außerdem habe ich 'unit' zu einem Long gemacht, sollte schneller als Byte sein 

'NbDecimals' ist jetzt auch ein Long 
 
Code: Alles auswählen
Procedure.s byterechner(byte.q, NbDecimals.l=1) 
   Protected unit.l=Log(byte)/Log(1024)
   ProcedureReturn StrD(byte/Pow(1024, unit), NbDecimals*(unit And 1))+" "+StringField("Byte,KB,MB,GB,TB,PB,EB", unit+1, ",") 
EndProcedure
Beschreibung: 
Geht bis 8.999.999.999.999.999.999 Byte (7,8 EB) Kann also auch für Wetterstationen benutzt werden 
 
So, damit wir's auch alle korrekt haben.
Das StringField() gefällt mir noch nicht ganz. Ich habe es verwendet, weil "Byte" und "KB" eine unterschiedliche Länge haben, sonst hätte man einfach PeekS() in Zusammenhang mit 'unit' nehmen können, welcher immer einen Teilstring gleicher Länge rausschneidet.
Hat jemand eine bessere Idee?
 
			 
			
					
				
				Verfasst: 03.04.2007 11:20
				von Kiffi
				AND51 hat geschrieben:Hat jemand eine bessere Idee?
Byte durch BT ersetzen und dann ein nachträgliches Replace auf den 
gepeekten String (BT zu Byte)? Aber so richtig schick ist das auch nicht...
Grüße ... Kiffi
 
			 
			
					
				
				Verfasst: 05.04.2007 14:06
				von HeX0R
				z.B. so, wie NTQ und ich es bereits 
vor einem Jahr ausgearbeitet haben.
Ist auch noch wesentlich schneller als das hier...
 
			 
			
					
				
				Verfasst: 05.04.2007 14:46
				von AND51
				Kiffi: Nein, wenn dann würd ich ehere "B " nehmen und RTrim drauf anwenden. Aber egal, solche Methodne sind zu langsam.
@ Hexor: Warum nimmst du den Input als Double entgehen? Quad kann (auch auf die Gefahr hin, mich auf Glatteis zu begeben) einen viel größeren Zahlenbreich fassen.
Und selbst Quad mit seinem Bereich von bis zu 9e+10-1 nur bis EB gehen, das Z und Y sind also überflüssig. Aber interessant deine Lösung!
			 
			
					
				
				Verfasst: 05.04.2007 14:51
				von HeX0R
				AND51 hat geschrieben:
@ Hexor: Warum nimmst du den Input als Double entgehen? Quad kann (auch auf die Gefahr hin, mich auf Glatteis zu begeben) einen viel größeren Zahlenbreich fassen.
Schau mal in Sachen Wertebereich.