This commit is contained in:
Looly
2024-04-21 10:02:07 +08:00
parent dfdb62d6b0
commit da0e7ae338
6 changed files with 336 additions and 294 deletions

View File

@@ -283,21 +283,21 @@ public class NumberChineseFormatterTest {
@Test
public void chineseToNumberTest(){
Assertions.assertEquals(0, ChineseNumberFormatter.parseFromChinese(""));
Assertions.assertEquals(102, ChineseNumberFormatter.parseFromChinese("一百零二"));
Assertions.assertEquals(112, ChineseNumberFormatter.parseFromChinese("一百一十二"));
Assertions.assertEquals(1012, ChineseNumberFormatter.parseFromChinese("一千零一十二"));
Assertions.assertEquals(1000000, ChineseNumberFormatter.parseFromChinese("一百万"));
Assertions.assertEquals(2000100112, ChineseNumberFormatter.parseFromChinese("二十亿零一十万零一百一十二"));
Assertions.assertEquals(0, ChineseNumberParser.parseFromChinese(""));
Assertions.assertEquals(102, ChineseNumberParser.parseFromChinese("一百零二"));
Assertions.assertEquals(112, ChineseNumberParser.parseFromChinese("一百一十二"));
Assertions.assertEquals(1012, ChineseNumberParser.parseFromChinese("一千零一十二"));
Assertions.assertEquals(1000000, ChineseNumberParser.parseFromChinese("一百万"));
Assertions.assertEquals(2000100112, ChineseNumberParser.parseFromChinese("二十亿零一十万零一百一十二"));
}
@Test
public void chineseToNumberTest2(){
Assertions.assertEquals(120, ChineseNumberFormatter.parseFromChinese("一百二"));
Assertions.assertEquals(1200, ChineseNumberFormatter.parseFromChinese("一千二"));
Assertions.assertEquals(22000, ChineseNumberFormatter.parseFromChinese("两万二"));
Assertions.assertEquals(22003, ChineseNumberFormatter.parseFromChinese("两万二零三"));
Assertions.assertEquals(22010, ChineseNumberFormatter.parseFromChinese("两万二零一十"));
Assertions.assertEquals(120, ChineseNumberParser.parseFromChinese("一百二"));
Assertions.assertEquals(1200, ChineseNumberParser.parseFromChinese("一千二"));
Assertions.assertEquals(22000, ChineseNumberParser.parseFromChinese("两万二"));
Assertions.assertEquals(22003, ChineseNumberParser.parseFromChinese("两万二零三"));
Assertions.assertEquals(22010, ChineseNumberParser.parseFromChinese("两万二零一十"));
}
@Test
@@ -305,16 +305,16 @@ public class NumberChineseFormatterTest {
// issue#1726对于单位开头的数组默认赋予1
// 十二 -> 一十二
// 百二 -> 一百二
Assertions.assertEquals(12, ChineseNumberFormatter.parseFromChinese("十二"));
Assertions.assertEquals(120, ChineseNumberFormatter.parseFromChinese("百二"));
Assertions.assertEquals(1300, ChineseNumberFormatter.parseFromChinese("千三"));
Assertions.assertEquals(12, ChineseNumberParser.parseFromChinese("十二"));
Assertions.assertEquals(120, ChineseNumberParser.parseFromChinese("百二"));
Assertions.assertEquals(1300, ChineseNumberParser.parseFromChinese("千三"));
}
@Test
public void badNumberTest(){
Assertions.assertThrows(IllegalArgumentException.class, ()->{
// 连续数字检查
ChineseNumberFormatter.parseFromChinese("一百一二三");
ChineseNumberParser.parseFromChinese("一百一二三");
});
}
@@ -322,7 +322,7 @@ public class NumberChineseFormatterTest {
public void badNumberTest2(){
Assertions.assertThrows(IllegalArgumentException.class, ()->{
// 非法字符
ChineseNumberFormatter.parseFromChinese("一百你三");
ChineseNumberParser.parseFromChinese("一百你三");
});
}
@@ -373,13 +373,13 @@ public class NumberChineseFormatterTest {
* s=叁角贰分, n=0.32
* s=陆万柒仟伍佰伍拾陆元叁角贰分, n=67556.32
*/
Assertions.assertEquals(67556, ChineseNumberFormatter.parseFromChineseMoney("陆万柒仟伍佰伍拾陆圆").longValue());
Assertions.assertEquals(67556, ChineseNumberFormatter.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元").longValue());
Assertions.assertEquals(0.3D, ChineseNumberFormatter.parseFromChineseMoney("叁角").doubleValue(), 0);
Assertions.assertEquals(0.02, ChineseNumberFormatter.parseFromChineseMoney("贰分").doubleValue(), 0);
Assertions.assertEquals(67556.3, ChineseNumberFormatter.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元叁角").doubleValue(), 0);
Assertions.assertEquals(67556.02, ChineseNumberFormatter.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元贰分").doubleValue(), 0);
Assertions.assertEquals(0.32, ChineseNumberFormatter.parseFromChineseMoney("叁角贰分").doubleValue(), 0);
Assertions.assertEquals(67556.32, ChineseNumberFormatter.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元叁角贰分").doubleValue(), 0);
Assertions.assertEquals(67556, ChineseNumberParser.parseFromChineseMoney("陆万柒仟伍佰伍拾陆圆").longValue());
Assertions.assertEquals(67556, ChineseNumberParser.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元").longValue());
Assertions.assertEquals(0.3D, ChineseNumberParser.parseFromChineseMoney("叁角").doubleValue(), 0);
Assertions.assertEquals(0.02, ChineseNumberParser.parseFromChineseMoney("贰分").doubleValue(), 0);
Assertions.assertEquals(67556.3, ChineseNumberParser.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元叁角").doubleValue(), 0);
Assertions.assertEquals(67556.02, ChineseNumberParser.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元贰分").doubleValue(), 0);
Assertions.assertEquals(0.32, ChineseNumberParser.parseFromChineseMoney("叁角贰分").doubleValue(), 0);
Assertions.assertEquals(67556.32, ChineseNumberParser.parseFromChineseMoney("陆万柒仟伍佰伍拾陆元叁角贰分").doubleValue(), 0);
}
}

View File

@@ -12,7 +12,6 @@
package org.dromara.hutool.core.math;
import org.dromara.hutool.core.math.NumberWordFormatter;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -20,37 +19,37 @@ public class NumberWordFormatTest {
@Test
public void formatTest() {
final String format = NumberWordFormatter.format(100.23);
final String format = EnglishNumberFormatter.format(100.23);
Assertions.assertEquals("ONE HUNDRED AND CENTS TWENTY THREE ONLY", format);
final String format2 = NumberWordFormatter.format("2100.00");
final String format2 = EnglishNumberFormatter.format("2100.00");
Assertions.assertEquals("TWO THOUSAND ONE HUNDRED AND CENTS ONLY", format2);
final String format3 = NumberWordFormatter.format("1234567890123.12");
final String format3 = EnglishNumberFormatter.format("1234567890123.12");
Assertions.assertEquals("ONE TRILLION TWO HUNDRED AND THIRTY FOUR BILLION FIVE HUNDRED AND SIXTY SEVEN MILLION EIGHT HUNDRED AND NINETY THOUSAND ONE HUNDRED AND TWENTY THREE AND CENTS TWELVE ONLY", format3);
}
@Test
public void formatSimpleTest() {
final String format1 = NumberWordFormatter.formatSimple(1200, false);
final String format1 = EnglishNumberFormatter.formatSimple(1200, false);
Assertions.assertEquals("1.2k", format1);
final String format2 = NumberWordFormatter.formatSimple(4384324, false);
final String format2 = EnglishNumberFormatter.formatSimple(4384324, false);
Assertions.assertEquals("4.38m", format2);
final String format3 = NumberWordFormatter.formatSimple(4384324, true);
final String format3 = EnglishNumberFormatter.formatSimple(4384324, true);
Assertions.assertEquals("438.43w", format3);
final String format4 = NumberWordFormatter.formatSimple(4384324);
final String format4 = EnglishNumberFormatter.formatSimple(4384324);
Assertions.assertEquals("438.43w", format4);
final String format5 = NumberWordFormatter.formatSimple(438);
final String format5 = EnglishNumberFormatter.formatSimple(438);
Assertions.assertEquals("438", format5);
}
@Test
public void formatSimpleTest2(){
final String s = NumberWordFormatter.formatSimple(1000);
final String s = EnglishNumberFormatter.formatSimple(1000);
Assertions.assertEquals("1k", s);
}
}