go-humanize
go-humanize copied to clipboard
Bytes returns 32 MB for 31450000 bytes instead of 31 MB
Sample program
package main
import (
"fmt"
"github.com/dustin/go-humanize"
)
func main() {
fmt.Println(humanize.Bytes(31350000))
fmt.Println(humanize.Bytes(31450000))
}
Current output
The above program, compiled with the latest main branch prints 31 MB and 32 MB.
Expected output
The result should be 31 MB for both calls. This is because 31.45 is less than 31.5. Hence, should be rounded down.
This could be happening because of rounding errors in floating points.
Also, as a side note, the default rounding behaviour of the Bytes function is not documented properly.
Yeah, that makes sense. It's a floor as it goes up in magnitude, so it wouldn't use a rounding rule like you expect. I'm not sure there's a best way. It's easy to argue for any of floor, ceiling, or the many rounding variations.
If I understood correctly, we should use floor, right?
So humanize.Bytes(31450000) should be 31 MB right?
Shall I raise a PR to fix this bug?