From fd51eb08b485474e2cfc1ad43d1552340e453155 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 8 Sep 2020 15:42:29 +0800 Subject: [PATCH] fix date size bug --- CHANGELOG.md | 3 ++- .../src/main/java/cn/hutool/core/io/unit/DataSizeUtil.java | 2 +- .../test/java/cn/hutool/core/io/unit/DataSizeUtilTest.java | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ea97adad..4be421668 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.4.2 (2020-09-07) +# 5.4.2 (2020-09-08) ### 新特性 * 【core 】 lock放在try外边(pr#1050@Github) @@ -24,6 +24,7 @@ * 【poi 】 修复CglibUtil.copyList参数错误导致的问题 * 【http 】 修复GET请求附带body导致变POST的问题 * 【core 】 修复double相等判断问题(pr#175@Gitee) +* 【core 】 修复DateSizeUtil.format越界问题(issue#1069@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/io/unit/DataSizeUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/unit/DataSizeUtil.java index f786f37e6..877d12be5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/unit/DataSizeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/unit/DataSizeUtil.java @@ -31,7 +31,7 @@ public class DataSizeUtil { if (size <= 0) { return "0"; } - int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); + int digitGroups = Math.min(DataUnit.UNIT_NAMES.length-1, (int) (Math.log10(size) / Math.log10(1024))); return new DecimalFormat("#,##0.##") .format(size / Math.pow(1024, digitGroups)) + " " + DataUnit.UNIT_NAMES[digitGroups]; } diff --git a/hutool-core/src/test/java/cn/hutool/core/io/unit/DataSizeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/unit/DataSizeUtilTest.java index c7df9e28b..9297a65a4 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/unit/DataSizeUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/unit/DataSizeUtilTest.java @@ -19,4 +19,10 @@ public class DataSizeUtilTest { parse = DataSizeUtil.parse("3mb"); Assert.assertEquals(3145728, parse); } + + @Test + public void formatTest(){ + final String format = DataSizeUtil.format(Long.MAX_VALUE); + Assert.assertEquals("8,192 EB", format); + } }