From 56d4a849f45c64ed5a1fb9323469233d15d259c8 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 26 Jul 2021 18:43:46 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 1 + .../cn/hutool/core/convert/NumberChineseFormatter.java | 9 ++++++++- .../core/convert/NumberChineseFormatterTest.java | 10 ++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecf7972c5..f149a2aa2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ * 【core 】 修复FileTypeUtil判断wps修改过的xlsx误判为jar的问题(pr#380@Gitee) * 【core 】 修复Sftp.isDir异常bug(pr#378@Gitee) * 【core 】 修复BeanUtil.copyProperties集合元素复制成功,读取失败的问题(issue#I41WKP@Gitee) +* 【core 】 修复NumberChineseFormatter.chineseToNumber十位数错误(issue#1726@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java b/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java index ad519a68e..729682d1d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/NumberChineseFormatter.java @@ -249,7 +249,14 @@ public class NumberChineseFormatter { section = 0; } else { // 非节单位,和单位前的单数字组合为值 - section += (number * unit.value); + int unitNumber = number; + if(0 == number && 0 == i){ + // issue#1726,对于单位开头的数组,默认赋予1 + // 十二 -> 一十二 + // 百二 -> 一百二 + unitNumber = 1; + } + section += (unitNumber * unit.value); } number = 0; } diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java index 21b5248ce..83c0abfc8 100644 --- a/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/NumberChineseFormatterTest.java @@ -116,6 +116,16 @@ public class NumberChineseFormatterTest { Assert.assertEquals(22010, NumberChineseFormatter.chineseToNumber("两万二零一十")); } + @Test + public void chineseToNumberTest3(){ + // issue#1726,对于单位开头的数组,默认赋予1 + // 十二 -> 一十二 + // 百二 -> 一百二 + Assert.assertEquals(12, NumberChineseFormatter.chineseToNumber("十二")); + Assert.assertEquals(120, NumberChineseFormatter.chineseToNumber("百二")); + Assert.assertEquals(1300, NumberChineseFormatter.chineseToNumber("千三")); + } + @Test(expected = IllegalArgumentException.class) public void badNumberTest(){ // 连续数字检查