class HumanReadable {
public static String humanReadableByteCount
(final long bytes,
final boolean si
) {
final int unit=si ? 1000 : 1024;
if(bytes<unit)
return bytes+" B";
double result=bytes;
final String unitsToUse
=si
? "kMGTPE" : "KMGTPE"; int i=0;
final int unitsCount=unitsToUse.length();
for(;i<unitsCount-1;++i)
{
result/=unit;
if(result<unit)
break;
}
final StringBuilder sb=new StringBuilder(9);
sb.
append(String.
format("%.1f ",result
)); sb.append(unitsToUse.charAt(i));
if(si)
sb.append('B');
else sb.append('i').append('B');
final String resultStr
=sb.
toString(); return resultStr;
}
public static void main
(String[] args
) { System.
out.
println(humanReadableByteCount
(999999999999999935L,
true)); System.
out.
println(humanReadableByteCount
(999999999999999936L,
true)); }
}
CmNsYXNzIEh1bWFuUmVhZGFibGUgewogICAgCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBodW1hblJlYWRhYmxlQnl0ZUNvdW50KGZpbmFsIGxvbmcgYnl0ZXMsZmluYWwgYm9vbGVhbiBzaSkKICAgICAgewogICAgICBmaW5hbCBpbnQgdW5pdD1zaSA/IDEwMDAgOiAxMDI0OwogICAgICBpZihieXRlczx1bml0KQogICAgICAgIHJldHVybiBieXRlcysiIEIiOwogICAgICBkb3VibGUgcmVzdWx0PWJ5dGVzOwogICAgICBmaW5hbCBTdHJpbmcgdW5pdHNUb1VzZT1zaSA/ICJrTUdUUEUiIDogIktNR1RQRSI7CiAgICAgIGludCBpPTA7CiAgICAgIGZpbmFsIGludCB1bml0c0NvdW50PXVuaXRzVG9Vc2UubGVuZ3RoKCk7CiAgICAgIGZvcig7aTx1bml0c0NvdW50LTE7KytpKQogICAgICAgIHsKICAgICAgICByZXN1bHQvPXVuaXQ7CiAgICAgICAgaWYocmVzdWx0PHVuaXQpCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2I9bmV3IFN0cmluZ0J1aWxkZXIoOSk7CiAgICAgIHNiLmFwcGVuZChTdHJpbmcuZm9ybWF0KCIlLjFmICIscmVzdWx0KSk7CiAgICAgIHNiLmFwcGVuZCh1bml0c1RvVXNlLmNoYXJBdChpKSk7CiAgICAgIGlmKHNpKQogICAgICAgIHNiLmFwcGVuZCgnQicpOwogICAgICBlbHNlIHNiLmFwcGVuZCgnaScpLmFwcGVuZCgnQicpOwogICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0U3RyPXNiLnRvU3RyaW5nKCk7CiAgICAgIHJldHVybiByZXN1bHRTdHI7CiAgICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihodW1hblJlYWRhYmxlQnl0ZUNvdW50KDk5OTk5OTk5OTk5OTk5OTkzNUwsIHRydWUpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaHVtYW5SZWFkYWJsZUJ5dGVDb3VudCg5OTk5OTk5OTk5OTk5OTk5MzZMLCB0cnVlKSk7CiAgICB9Cgp9Cg==