Page 1 of 1

SizeIt() - Byte Converter

Posted: Sun Jul 03, 2016 7:12 pm
by Thunder93
Cross-platform supported Byte Converter.

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

Re: SizeIt() - Byte Converter

Posted: Mon Jul 04, 2016 10:40 am
by Joris
Nice.