I need to display a file size as a string using sensible units. For example, 1L ==> "1 B"; 1024L ==> "1 KB"; 2537253L ==> "2.3 MB" etc. I found this previous answer, which I didn't find satisfactory. I have come up with my own solution which has similar shortcomings: private static final long K = 1024; private static final long M = K * K; private static final long G = M * K; private static final l