[
https://issues.apache.org/jira/browse/IO-876?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18014016#comment-18014016
]
Gary D. Gregory commented on IO-876:
------------------------------------
Yeah, the Javadoc and behavior match at least: "round down".
I added more tests to check the current behavior in
{{org.apache.commons.io.FileUtilsTest.testByteCountToDisplaySizeLong():}}
{code:java}
// Constants and round down.
assertEquals("1 EB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_EB));
assertEquals("1 EB", FileUtils.byteCountToDisplaySize(FileUtils.ONE_EB
+ 1));
assertEquals("1 EB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_EB_BI));
assertEquals("1 EB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_EB_BI.add(BigInteger.ONE)));
assertEquals("1 GB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_GB));
assertEquals("1 GB", FileUtils.byteCountToDisplaySize(FileUtils.ONE_GB
+ 1));
assertEquals("1 GB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_GB_BI));
assertEquals("1 GB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_GB_BI.add(BigInteger.ONE)));
assertEquals("1 KB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_KB));
assertEquals("1 KB", FileUtils.byteCountToDisplaySize(FileUtils.ONE_KB
+ 1));
assertEquals("1 KB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_KB_BI));
assertEquals("1 KB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_KB_BI.add(BigInteger.ONE)));
assertEquals("1 MB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_MB));
assertEquals("1 MB", FileUtils.byteCountToDisplaySize(FileUtils.ONE_MB
+ 1));
assertEquals("1 MB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_MB_BI));
assertEquals("1 MB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_MB_BI.add(BigInteger.ONE)));
assertEquals("1 PB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_PB));
assertEquals("1 PB", FileUtils.byteCountToDisplaySize(FileUtils.ONE_PB
+ 1));
assertEquals("1 PB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_PB_BI));
assertEquals("1 PB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_PB_BI.add(BigInteger.ONE)));
assertEquals("1 TB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_TB));
assertEquals("1 TB", FileUtils.byteCountToDisplaySize(FileUtils.ONE_TB
+ 1));
assertEquals("1 TB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_TB_BI));
assertEquals("1 TB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_TB_BI.add(BigInteger.ONE)));
// Constants and round down.
assertEquals("1023 PB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_EB - 1));
assertEquals("1023 PB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_EB_BI.subtract(BigInteger.ONE)));
assertEquals("1023 MB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_GB - 1));
assertEquals("1023 MB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_GB_BI.subtract(BigInteger.ONE)));
assertEquals("1023 bytes",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_KB - 1));
assertEquals("1023 bytes",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_KB_BI.subtract(BigInteger.ONE)));
assertEquals("1023 KB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_MB - 1));
assertEquals("1023 KB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_MB_BI.subtract(BigInteger.ONE)));
assertEquals("1023 TB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_PB - 1));
assertEquals("1023 TB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_PB_BI.subtract(BigInteger.ONE)));
assertEquals("1023 GB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_TB - 1));
assertEquals("1023 GB",
FileUtils.byteCountToDisplaySize(FileUtils.ONE_TB_BI.subtract(BigInteger.ONE)));\
{code}
> FileUtils.byteCountToDisplaySize returns incorrect values
> ---------------------------------------------------------
>
> Key: IO-876
> URL: https://issues.apache.org/jira/browse/IO-876
> Project: Commons IO
> Issue Type: Bug
> Affects Versions: 2.8.0, 2.20.0
> Reporter: Samael Bate
> Priority: Major
>
> I get that there can be discrepancies depending on whether discussing GB or
> GiB but as commons-io has a constant for {{FileUtils.ONE_GB}} which is
> 1,073,741,824 I can presume that the value being returned by
> FileUtils.byteCountToDisplaySize should actually be an accurate GiB value,
> despite the text being just GB.
> So there's two problems here, the text saying MG, GB, etc should probably be
> formatted with the more correct text post-fixed (MiB, GiB, etc).
> However my main issue is that either way the results are just wrong. This
> seems to be caused by the function simply dropping the fractional digits
> rather than using any decimal places or rounding.
> For example 1.9 GB will get returned by this function as "1 GB":
> {code:java}
> FileUtils.byteCountToDisplaySize(2018148352L) // returns "1 GB" but is only
> just a little short of 2 GB{code}
>
> Seems this has been an issue for a while:
> * https://issues.apache.org/jira/browse/IO-226 (created 2010)
> * https://issues.apache.org/jira/browse/IO-294 (created 2011)
> * https://issues.apache.org/jira/browse/IO-373 (created 2013)
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)