Skip to content

Commit 806f3c8

Browse files
committed
修复NumberWordFormatterformatSimple输出错误问题(pr#4034@Github)
1 parent 98803bb commit 806f3c8

File tree

3 files changed

+56
-5
lines changed

3 files changed

+56
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# 🚀Changelog
33

44
-------------------------------------------------------------------------------------------------------------
5-
# 5.8.40(2025-08-25)
5+
# 5.8.40(2025-08-26)
66

77
### 🐣新特性
88
* 【captcha】 `MathGenerator`四则运算方式支持不生成负数结果(pr#1363@Gitee)
@@ -22,7 +22,8 @@
2222
* 【extra 】 修复`QLExpressEngine`allowClassSet无效问题(issue#3994@Github)
2323
* 【core 】 修复`StrBuilder`insert插入计算错误问题(issue#ICTSRZ@Gitee)
2424
* 【cron 】 修复`CronPatternUtil.nextDateAfter`计算下一个匹配表达式的日期时,计算错误问题(issue#4006@Github)
25-
* 【cache 】 `ReentrantCache`修改get逻辑key锁改为全局锁,保证安全。(issue#4022@Github)
25+
* 【cache 】 `ReentrantCache`修改get逻辑key锁改为全局锁,保证安全(issue#4022@Github)
26+
* 【core 】 修复`NumberWordFormatter`formatSimple输出错误问题(pr#4034@Github)
2627

2728
-------------------------------------------------------------------------------------------------------------
2829
# 5.8.39(2025-06-20)

hutool-core/src/main/java/cn/hutool/core/convert/NumberWordFormatter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ public static String formatSimple(long value, boolean isTwo) {
6666
}
6767

6868
double res = value;
69-
int index = 0;
69+
final int index;
7070

7171
if (isTwo) {
7272
// 当isTwo为true时,只使用k和w单位
73-
if (value >= 100000) {
73+
if (value >= 10000) {
7474
// 使用w单位(除以10000,即10k = 1w)
7575
res = value / 10000.0;
7676
index = 1; // w在NUMBER_SUFFIX[1]

hutool-core/src/test/java/cn/hutool/core/convert/NumberWordFormatTest.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package cn.hutool.core.convert;
22

3-
import static org.junit.jupiter.api.Assertions.*;
3+
import org.junit.jupiter.api.Assertions;
44
import org.junit.jupiter.api.Test;
55

6+
import static org.junit.jupiter.api.Assertions.assertEquals;
7+
68
public class NumberWordFormatTest {
79

810
@Test
@@ -43,4 +45,52 @@ public void formatSimpleTest2(){
4345
final String s = NumberWordFormatter.formatSimple(1000);
4446
assertEquals("1k", s);
4547
}
48+
49+
@Test
50+
public void issue4033Test(){
51+
String s = NumberWordFormatter.formatSimple(1_000, false);
52+
Assertions.assertEquals("1k", s);
53+
54+
s = NumberWordFormatter.formatSimple(10_000, false);
55+
Assertions.assertEquals("10k", s);
56+
57+
s = NumberWordFormatter.formatSimple(100_000, false);
58+
Assertions.assertEquals("100k", s);
59+
60+
s = NumberWordFormatter.formatSimple(1_000_000, false);
61+
Assertions.assertEquals("1m", s);
62+
63+
s = NumberWordFormatter.formatSimple(10_000_000, false);
64+
Assertions.assertEquals("10m", s);
65+
66+
s = NumberWordFormatter.formatSimple(100_000_000, false);
67+
Assertions.assertEquals("100m", s);
68+
69+
s = NumberWordFormatter.formatSimple(1_000_000_000, false);
70+
Assertions.assertEquals("1b", s);
71+
}
72+
73+
@Test
74+
public void issue4033Test2(){
75+
String s = NumberWordFormatter.formatSimple(1_000, true);
76+
Assertions.assertEquals("1k", s);
77+
78+
s = NumberWordFormatter.formatSimple(10_000, true);
79+
Assertions.assertEquals("1w", s);
80+
81+
s = NumberWordFormatter.formatSimple(100_000, true);
82+
Assertions.assertEquals("10w", s);
83+
84+
s = NumberWordFormatter.formatSimple(1_000_000, true);
85+
Assertions.assertEquals("100w", s);
86+
87+
s = NumberWordFormatter.formatSimple(10_000_000, true);
88+
Assertions.assertEquals("1000w", s);
89+
90+
s = NumberWordFormatter.formatSimple(100_000_000, true);
91+
Assertions.assertEquals("10000w", s);
92+
93+
s = NumberWordFormatter.formatSimple(1_000_000_000, true);
94+
Assertions.assertEquals("100000w", s);
95+
}
4696
}

0 commit comments

Comments
 (0)