func (b Byte) HumanReadable(measurement Byte, format []string) string {
	i := 0
	for ; i < len(units); i++ {
		if b < measurement {
			return fmt.Sprintf("%.1f%s", b, format[i])
		}
		b /= measurement
	}
	return fmt.Sprintf("%.1f%s", b*measurement, format[i-1])
}
HumanReadable will take a measurement multiple as well as a slice of formats
to convert the byte into a human readable format using the given parameters.
package mathutil  
import (
	"fmt"
	"math"
)
func Round(f float64) float64 {
	if f < 0 {
		return math.Ceil(f - 0.5)
	}
	return math.Floor(f + 0.5)
}
func RoundPlus(f float64, precision int) float64 {
	shift := math.Pow(10, float64(precision))
	return Round(f*shift) / shift
}
func Min(a, b int64) int64 {
	if a > b {
		return b
	}
	return a
}
func Max(a, b int64) int64 {
	if a < b {
		return b
	}
	return a
}
func Limit(v, lower, upper float64) float64 {
	return math.Max(math.Min(v, upper), lower)
}
func DivideCeil(count int64, pageSize int64) int64 {
	return int64(math.Ceil(float64(count) / float64(pageSize)))
}
func IsSignedZero(f float64) bool {
	return math.Float64bits(f)^uint64(1<<63) == 0
}
type Byte float64
var units = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB"}
var unitsAsBytes = []string{"B", "KB", "MB", "GB", "TB", "PB"}
func (b Byte) String() string {
	return b.HumanReadable(1024, units)
}
func (b Byte) StringAsBytes() string {
	return b.HumanReadable(1000, unitsAsBytes)
}