Auf Seite 6 gibt es ein Update, welches etwas schneller ist, als der "Gewinner" (Gott, klingt das eingebildet) des deutschen Contests!
»»» Gehe zu Seite 6
Das Update benutzt auch keine 'booleschen Ausdrücke' mehr, diese werden offiziell nämlich nicht unterstützt!
———————————————————————————————————————
Hallo!
Edit: Hier habe ich den Code mal nach vorn geholt und gleichzeitig nocheinmal verbessert. (Update: 0 Byte wurden als 1- byte umgerechnet, Fehler behoben)
Code: Alles auswählen
Procedure.s byterechner(byte.q, NbDecimals.l=0)
	Protected unit.l
	If byte
		unit=Round(Log(byte)/Log(1024), 0)
	EndIf
	ProcedureReturn StrD(byte/Pow(1024, unit), NbDecimals*(unit And 1))+" "+StringField("Byte,KB,MB,GB,TB,PB,EB", unit+1, ",")
EndProcedure
Debug byterechner(-4096) ; ungültige Angabe wird zu "-1 Byte"
Debug byterechner(0) ; Eine Null-Byte große Datei bleibt auch 0 Byte groß :)
Debug byterechner(27101988) ; Bisherige Angaben bleiben ok- Funktionstüchtig mit PB 4.01+
Beschreibung: Geht bis 8.999.999.999.999.999.999 Byte (7,8 EB) 
Hier meine neue PB 4 Byterechner Prozedur.
rechnet beliebige Anzahl an Bytes mit Hilfe des neuen Types Quad in die größtmögliche Einheit um. Wer weiß schon, wie viel 4096096 Byte in KB sind?^^
Wer mag, kann ja die Prozedur erweitert hier posten, sodass ein oder zwei Stellen hinter dem Komma unrerstützt werden. Ich habe ein bisschen mit Modulo versucht, aber sofort die Krise gekriegt. Wäre an der extended Version interessiert
Meine Version rundet nämlich ab, weil es ja alles hinterm Komma weglässt.
Meine ältere Version des Byterechners arbeitete mit Floats, die Prozedur fliegt ie im Forum irgendwo noch rum. Diese unterstützte Kommazahlen, konnte dafür aber nicht so weit wie diese hier rechnen.
Code: Alles auswählen
Procedure.s byterechner(byte.q)
	Protected einheit.s
	
	If byte < 1024
		ProcedureReturn Str(byte)+" Byte"
	EndIf
	If byte >= 1024
		byte/1024
		einheit.s=" KB"
	EndIf
	If byte >= 1024
		byte/1024
		einheit.s=" MB"
	EndIf
	If byte >= 1024
		byte/1024
		einheit.s=" GB"
	EndIf
	If byte >= 1024
		byte/1024
		einheit.s=" TB"
	EndIf
	If byte >= 1024
		byte/1024
		einheit.s=" PB"
	EndIf
	If byte >= 1024
		byte/1024
		einheit.s=" EB"
	EndIf
	
	ProcedureReturn Str(byte)+einheit.s
EndProcedure
Debug byterechner(4096096) ; 3 MB
Debug byterechner(1024) ; 1 KB 
Debug byterechner($FFFFFF) ; 15 MB
Debug byterechner(21456985147) ; 19 GB