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..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
@@ -1554,4 +1554,88 @@ public class NumberUtil extends NumberValidator {
}
return equals(toBigDecimal(n), BigDecimal.ZERO);
}
+
+ /**
+ * 整数转罗马数字
+ * 限制:[1,3999]的正整数
+ *
+ * - I 1
+ * - V 5
+ * - X 10
+ * - L 50
+ * - C 100
+ * - D 500
+ * - M 1000
+ *
+ *
+ * @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];
+ }
+
+ /**
+ * 罗马数字转整数
+ * @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;
+ }
}