Golang : Byte format example
Problem:
You want to format the long integer or number string representing a byte size such as giga, mega, peta or exa bytes into a shorter form to readability purpose. Such as formating 1234567891
to 1.1 GB
.
Solution:
This ByteFormat()
function will convert a given size in float64
type into a formatted string plus the measurement unit.
Here you go!
package main
import (
"fmt"
"math"
"strconv"
)
func RoundUp(input float64, places int) (newVal float64) {
var round float64
pow := math.Pow(10, float64(places))
digit := pow * input
round = math.Ceil(digit)
newVal = round / pow
return
}
func ByteFormat(inputNum float64, precision int) string {
if precision <= 0 {
precision = 1
}
var unit string
var returnVal float64
if inputNum >= 1000000000000000000000000 {
returnVal = RoundUp((inputNum / 1208925819614629174706176), precision)
unit = " YB" // yottabyte
} else if inputNum >= 1000000000000000000000 {
returnVal = RoundUp((inputNum / 1180591620717411303424), precision)
unit = " ZB" // zettabyte
} else if inputNum >= 10000000000000000000 {
returnVal = RoundUp((inputNum / 1152921504606846976), precision)
unit = " EB" // exabyte
} else if inputNum >= 1000000000000000 {
returnVal = RoundUp((inputNum / 1125899906842624), precision)
unit = " PB" // petabyte
} else if inputNum >= 1000000000000 {
returnVal = RoundUp((inputNum / 1099511627776), precision)
unit = " TB" // terrabyte
} else if inputNum >= 1000000000 {
returnVal = RoundUp((inputNum / 1073741824), precision)
unit = " GB" // gigabyte
} else if inputNum >= 1000000 {
returnVal = RoundUp((inputNum / 1048576), precision)
unit = " MB" // megabyte
} else if inputNum >= 1000 {
returnVal = RoundUp((inputNum / 1024), precision)
unit = " KB" // kilobyte
} else {
returnVal = inputNum
unit = " bytes" // byte
}
return strconv.FormatFloat(returnVal, 'f', precision, 64) + unit
}
func main() {
fmt.Println("-----------------------------------------------------------------")
fmt.Println("Byte formatting with PRECISION = 1 example")
fmt.Println("-----------------------------------------------------------------")
fmt.Println("123 = ", ByteFormat(123, 1))
fmt.Println("1234 = ", ByteFormat(1234, 1))
fmt.Println("1234567 = ", ByteFormat(1234567, 1))
fmt.Println("1234567891 = ", ByteFormat(1234567891, 1))
fmt.Println("12345678912345 = ", ByteFormat(12345678912345, 1))
fmt.Println("123456789123456789 = ", ByteFormat(123456789123456789, 1))
fmt.Println("1234567891234567891234 = ", ByteFormat(1234567891234567891234, 1))
fmt.Println("123456789123456789123456789 = ", ByteFormat(123456789123456789123456789, 1))
fmt.Println("-----------------------------------------------------------------")
fmt.Println("Byte formatting with PRECISION = 4 example")
fmt.Println("-----------------------------------------------------------------")
fmt.Println("123 = ", ByteFormat(123, 4))
fmt.Println("1234 = ", ByteFormat(1234, 4))
fmt.Println("1234567 = ", ByteFormat(1234567, 4))
fmt.Println("1234567891 = ", ByteFormat(1234567891, 4))
fmt.Println("12345678912345 = ", ByteFormat(12345678912345, 4))
fmt.Println("123456789123456789 = ", ByteFormat(123456789123456789, 4))
fmt.Println("1234567891234567891234 = ", ByteFormat(1234567891234567891234, 4))
fmt.Println("123456789123456789123456789 = ", ByteFormat(123456789123456789123456789, 4))
}
Output:
-----------------------------------------------------------------
Byte formatting with PRECISION = 1 example
-----------------------------------------------------------------
123 = 123.0 bytes
1234 = 1.2 KB
1234567 = 1.2 MB
1234567891 = 1.1 GB
12345678912345 = 11.2 TB
123456789123456789 = 109.7 PB
1234567891234567891234 = 1.0 ZB
123456789123456789123456789 = 102.1 YB
-----------------------------------------------------------------
Byte formatting with PRECISION = 4 example
-----------------------------------------------------------------
123 = 123.0000 bytes
1234 = 1.2051 KB
1234567 = 1.1774 MB
1234567891 = 1.1498 GB
12345678912345 = 11.2284 TB
123456789123456789 = 109.6517 PB
1234567891234567891234 = 1.0458 ZB
123456789123456789123456789 = 102.1211 YB
Happy coding!
References:
https://www.socketloop.com/tutorials/golang-round-float-to-precision-example
https://www.socketloop.com/tutorials/golang-convert-float-to-string
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+7.4k Golang : get the current working directory of a running program
+23.4k Golang : Upload to S3 with official aws-sdk-go package
+16.3k Golang : Get the IPv4 and IPv6 addresses for a specific network interface
+9.6k Golang : Get escape characters \u form from unicode characters
+12.5k Golang : Convert IPv4 address to packed 32-bit binary format
+9.1k Golang : Qt Yes No and Quit message box example
+10.7k Google Maps URL parameters configuration
+5.6k Facebook : How to force facebook to scrape latest URL link data?
+11.8k Golang : md5 hash of a string
+8.6k Golang : io.Reader causing panic: runtime error: invalid memory address or nil pointer dereference
+9.3k Golang : Turn string or text file into slice example
+6.3k Golang : Humanize and Titleize functions