Skip to content

Commit ba80f1c

Browse files
committed
formatBytesForDisplay() - don't include decimal part for e.g. 3 B (was saying 3.0 B), add tests
1 parent aaf736d commit ba80f1c

2 files changed

Lines changed: 18 additions & 9 deletions

File tree

src/main/java/org/archive/util/ArchiveUtils.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -597,23 +597,29 @@ public static String doubleToString(double val, int maxFractionDigits, int minFr
597597
*/
598598
public static String formatBytesForDisplay(long amount) {
599599
double displayAmount = (double) amount;
600-
int unitPowerOf1024 = 0;
600+
int unitPowerOf1024 = 0;
601601

602602
if(amount <= 0){
603603
return "0 B";
604604
}
605-
606-
while(displayAmount>=1024 && unitPowerOf1024 < 4) {
605+
606+
final String[] units = { " B", " KiB", " MiB", " GiB", " TiB" };
607+
608+
while (displayAmount >= 1024 && unitPowerOf1024 < units.length - 1) {
607609
displayAmount = displayAmount / 1024;
608610
unitPowerOf1024++;
609611
}
610-
611-
final String[] units = { " B", " KiB", " MiB", " GiB", " TiB" };
612-
613-
// ensure at least 2 significant digits (#.#) for small displayValues
614-
int fractionDigits = (displayAmount < 10) ? 1 : 0;
612+
613+
int fractionDigits;
614+
if (unitPowerOf1024 == 0 || displayAmount >= 10) {
615+
fractionDigits = 0;
616+
} else {
617+
// ensure at least 2 significant digits (#.#) for small displayValues
618+
fractionDigits = 1;
619+
}
620+
615621
return doubleToString(displayAmount, fractionDigits, fractionDigits)
616-
+ units[unitPowerOf1024];
622+
+ units[unitPowerOf1024];
617623
}
618624

619625
/**

src/test/java/org/archive/util/ArchiveUtilsTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ public void testFormatBytesForDisplayPrecise(){
247247
.formatBytesForDisplay(-1));
248248
assertEquals("0 bytes", "0 B", ArchiveUtils
249249
.formatBytesForDisplay(0));
250+
assertEquals("1 B", ArchiveUtils.formatBytesForDisplay(1));
251+
assertEquals("9 B", ArchiveUtils.formatBytesForDisplay(9));
252+
assertEquals("512 B", ArchiveUtils.formatBytesForDisplay(512));
250253
assertEquals("1023 bytes", "1,023 B", ArchiveUtils
251254
.formatBytesForDisplay(1023));
252255
assertEquals("1025 bytes", "1.0 KiB", ArchiveUtils

0 commit comments

Comments
 (0)