From a599172b4f3419364845ed70958bad6e4027432e Mon Sep 17 00:00:00 2001 From: dazer007 Date: Fri, 19 Jan 2024 22:30:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?NumberUtil=E6=96=B0=E5=A2=9E=E6=AD=A3?= =?UTF-8?q?=E6=95=B4=E6=95=B0=E8=BD=AC=E7=BD=97=E9=A9=AC=E6=95=B0=E5=AD=97?= =?UTF-8?q?=EF=BC=8C=E9=99=90=E5=88=B6[1,3999]=E7=9A=84=E6=AD=A3=E6=95=B4?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/hutool/core/math/NumberUtil.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java index 561a86959..6088a4395 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java @@ -1554,4 +1554,37 @@ public class NumberUtil extends NumberValidator { } return equals(toBigDecimal(n), BigDecimal.ZERO); } + + /** + * 整数转罗马数字
+ * 限制:[1,3999]的正整数 + * + * + * @param num [1,3999]的正整数 + * @return 罗马数字 + * @since 6.0.0 + * @author dazer + */ + public static String intToRoman(int num) { + if (num > 3999 || num < 1 ){ + return ""; + } + String[] thousands = {"", "M", "MM", "MMM"}; + String[] hundreds = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; + String[] tens = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; + String[] ones = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; + + return thousands[num / 1000] + + hundreds[(num % 1000) / 100] + + tens[(num % 100) / 10] + + ones[num % 10]; + } } From c3e8d11238cf412ffbb5d368a48c75a157fb9926 Mon Sep 17 00:00:00 2001 From: dazer007 Date: Sat, 20 Jan 2024 22:31:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?NumberUtil=E6=96=B0=E5=A2=9EromanToInt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/hutool/core/math/NumberUtil.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java index 6088a4395..2002662b0 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java @@ -1587,4 +1587,55 @@ public class NumberUtil extends NumberValidator { tens[(num % 100) / 10] + ones[num % 10]; } + + /** + * 罗马数字转整数
+ * @param roman 罗马字符 + * @return 整数 + * @throws IllegalArgumentException 如果传入非罗马字符串,抛出异常 + * @since 6.0.0 + * @author dazer + */ + public static int romanToInt(String roman) { + int result = 0; + int prevValue = 0; + int currValue = 0; + + for (int i = roman.length() - 1; i >= 0; i--) { + char c = roman.charAt(i); + switch (c) { + case 'I': + currValue = 1; + break; + case 'V': + currValue = 5; + break; + case 'X': + currValue = 10; + break; + case 'L': + currValue = 50; + break; + case 'C': + currValue = 100; + break; + case 'D': + currValue = 500; + break; + case 'M': + currValue = 1000; + break; + default: + throw new IllegalArgumentException("Invalid Roman character: " + c); + } + if (currValue< prevValue) { + result -= currValue; + } else { + result += currValue; + } + + prevValue = currValue; + } + return result; + } }