Code: Select all
#Base2 = 1024
#Base10 = 1000
Procedure.s SizeIt(Value.q, Base.l = #Base2)
Protected unit.b = 0, byte.q, nSize.s, p.l = 0
If Value < 0 : ProcedureReturn "?" : EndIf
unit = Round(Log(Value)/Log(Base), 0) : If unit : p = 2 : EndIf
nSize = StrF(Value/Pow(Base, unit))
If ((Base = #Base10) And Value >= 1000) Or Value >= 1024
nSize = Mid(nSize, 1, FindString(nSize, ".", 1)+2)
EndIf
ProcedureReturn nSize + StringField(" Bytes, KB, MB, GB, TB, PB", unit+1, ",")
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Debug " Base 2 Base 10"
Debug SizeIt(532)+" "+SizeIt(532, #Base10)
Debug SizeIt(1000)+" "+SizeIt(1000, #Base10)
Debug SizeIt(1024)+" "+SizeIt(1024, #Base10)
Debug SizeIt(1340)+" "+SizeIt(1340, #Base10)
Debug SizeIt(23506)+" "+SizeIt(23506, #Base10)
Debug SizeIt(3400016)+" "+SizeIt(3400016, #Base10)
Debug SizeIt(4500000000)+" "+SizeIt(4500000000, #Base10)
Debug SizeIt(5600000000019)+" "+SizeIt(5600000000019, #Base10)
Debug ""+#CRLF$+"-"
Debug SizeIt(0)
Debug SizeIt(1000)
Debug SizeIt(10000)
Debug SizeIt(1000000)
Debug SizeIt(100000000)
Debug SizeIt(10000000000)
Debug SizeIt(10000000000000)
Debug SizeIt(10000000000000000)
CompilerEndIf