mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[platform] corrects rounding in unit formatting util (IDEA-CR-36060)
This commit is contained in:
@@ -341,10 +341,10 @@ public class StringUtilRt {
|
||||
public static String formatFileSize(long fileSize, @NotNull String unitSeparator) {
|
||||
if (fileSize < 0) throw new IllegalArgumentException("Invalid value: " + fileSize);
|
||||
if (fileSize == 0) return '0' + unitSeparator + 'B';
|
||||
int rank = (int)(Math.log10(fileSize) / 3);
|
||||
int rank = (int)((Math.log10(fileSize) + 0.0000021714778384307465) / 3); // (3 - Math.log10(999.995))
|
||||
double value = fileSize / Math.pow(1000, rank);
|
||||
String[] units = {"B", "kB", "MB", "GB", "TB", "PB", "EB"};
|
||||
return new DecimalFormat("#,##0.##").format(value) + unitSeparator + units[rank];
|
||||
return new DecimalFormat("0.##").format(value) + unitSeparator + units[rank];
|
||||
}
|
||||
|
||||
@Contract(pure = true)
|
||||
|
||||
@@ -495,15 +495,24 @@ public class StringUtilTest {
|
||||
assertEquals("2.15 GB", StringUtil.formatFileSize(Integer.MAX_VALUE));
|
||||
assertEquals("9.22 EB", StringUtil.formatFileSize(Long.MAX_VALUE));
|
||||
|
||||
assertEquals("60.1 kB", StringUtil.formatFileSize(60100));
|
||||
assertEquals("60.1 kB", StringUtil.formatFileSize(60_100));
|
||||
|
||||
assertEquals("1.23 kB", StringUtil.formatFileSize(1234));
|
||||
assertEquals("12.35 kB", StringUtil.formatFileSize(12345));
|
||||
assertEquals("123.46 kB", StringUtil.formatFileSize(123456));
|
||||
assertEquals("1.23 MB", StringUtil.formatFileSize(1234567));
|
||||
assertEquals("12.35 MB", StringUtil.formatFileSize(12345678));
|
||||
assertEquals("123.46 MB", StringUtil.formatFileSize(123456789));
|
||||
assertEquals("1.23 GB", StringUtil.formatFileSize(1234567890));
|
||||
assertEquals("1.23 kB", StringUtil.formatFileSize(1_234));
|
||||
assertEquals("12.35 kB", StringUtil.formatFileSize(12_345));
|
||||
assertEquals("123.46 kB", StringUtil.formatFileSize(123_456));
|
||||
assertEquals("1.23 MB", StringUtil.formatFileSize(1234_567));
|
||||
assertEquals("12.35 MB", StringUtil.formatFileSize(1_2345_678));
|
||||
assertEquals("123.46 MB", StringUtil.formatFileSize(123_456_789));
|
||||
assertEquals("1.23 GB", StringUtil.formatFileSize(1_234_567_890));
|
||||
|
||||
assertEquals("999 B", StringUtil.formatFileSize(999));
|
||||
assertEquals("1 kB", StringUtil.formatFileSize(1000));
|
||||
assertEquals("999.99 kB", StringUtil.formatFileSize(999_994));
|
||||
assertEquals("1 MB", StringUtil.formatFileSize(999_995));
|
||||
assertEquals("999.99 MB", StringUtil.formatFileSize(999_994_999));
|
||||
assertEquals("1 GB", StringUtil.formatFileSize(999_995_000));
|
||||
assertEquals("999.99 GB", StringUtil.formatFileSize(999_994_999_999L));
|
||||
assertEquals("1 TB", StringUtil.formatFileSize(999_995_000_000L));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user