Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

      • 数字数学
      • NumberUtil
      • MathUtil
        • 主要功能
        • 排列组合
          • arrangementCount(int n, int m)
          • arrangementCount(int n)
          • combinationCount(int n, int m)
          • arrangementSelect(String[] datas, int m)
          • arrangementSelect(String[] datas)
          • combinationSelect(String[] datas, int m)
        • 阶乘计算
          • factorial(long n)
          • factorial(BigInteger n)
          • factorial(long start, long end)
          • factorial(BigInteger start, BigInteger end)
        • 金额转换
          • yuanToCent(double yuan)
          • centToYuan(long cent)
        • 最大公约数和最小公倍数
          • gcd(int a, int b)
          • multiple(int m, int n)
        • 其他数学计算
          • sqrt(long x)
          • processMultiple(int selectNum, int minNum)
        • 注意事项
        • 总结
      • BitStatusUtil
    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 数字数学(math)
Hutool
2026-01-03
目录

MathUtil

MathUtil是Hutool中用于处理复杂数学计算的工具类,提供了排列组合、阶乘、最大公约数、最小公倍数等功能。

# 主要功能

  • 排列组合:排列数计算、组合数计算
  • 阶乘计算:普通阶乘、范围阶乘
  • 金额转换:元转分、分转元
  • 最大公约数和最小公倍数:计算两个数的最大公约数和最小公倍数
  • 其他数学计算:平方根算法等

# 排列组合

# arrangementCount(int n, int m)

计算排列数,即A(n, m) = n!/(n-m)!

long count = MathUtil.arrangementCount(5, 2);
// 输出: 20 (5*4)

# arrangementCount(int n)

计算排列数,即A(n, n) = n!

long count = MathUtil.arrangementCount(5);
// 输出: 120 (5!)

# combinationCount(int n, int m)

计算组合数,即C(n, m) = n!/((n-m)!*m!)

long count = MathUtil.combinationCount(5, 2);
// 输出: 10 (5*4/(2*1))

# arrangementSelect(String[] datas, int m)

排列选择,从列表中选择m个元素进行排列

String[] datas = {"A", "B", "C"};
List<String[]> result = MathUtil.arrangementSelect(datas, 2);
// 输出: [[A, B], [A, C], [B, A], [B, C], [C, A], [C, B]]

# arrangementSelect(String[] datas)

全排列选择,列表全部参与排列

String[] datas = {"A", "B", "C"};
List<String[]> result = MathUtil.arrangementSelect(datas);
// 输出: [[A, B, C], [A, C, B], [B, A, C], [B, C, A], [C, A, B], [C, B, A]]

# combinationSelect(String[] datas, int m)

组合选择,从列表中选择m个元素进行组合

String[] datas = {"A", "B", "C"};
List<String[]> result = MathUtil.combinationSelect(datas, 2);
// 输出: [[A, B], [A, C], [B, C]]

# 阶乘计算

# factorial(long n)

计算阶乘,n! = n * (n-1) * ... * 2 * 1

long result = MathUtil.factorial(5);
// 输出: 120 (5!)

long result2 = MathUtil.factorial(0);
// 输出: 1 (0! = 1)

注意:由于long类型的限制,n必须在0-20之间,否则会抛出异常。

# factorial(BigInteger n)

计算阶乘,支持大数阶乘

BigInteger result = MathUtil.factorial(BigInteger.valueOf(25));
// 输出: 15511210043330985984000000

# factorial(long start, long end)

计算范围阶乘,即start * (start-1) * ... * (end+1)

long result = MathUtil.factorial(5, 2);
// 输出: 60 (5*4*3)

# factorial(BigInteger start, BigInteger end)

计算范围阶乘,支持大数范围阶乘

BigInteger result = MathUtil.factorial(BigInteger.valueOf(10), BigInteger.valueOf(5));
// 输出: 151200 (10*9*8*7*6)

# 金额转换

# yuanToCent(double yuan)

将金额从元转换为分

long cent = MathUtil.yuanToCent(123.45);
// 输出: 12345

# centToYuan(long cent)

将金额从分转换为元

double yuan = MathUtil.centToYuan(12345);
// 输出: 123.45

# 最大公约数和最小公倍数

# gcd(int a, int b)

计算两个数的最大公约数

int gcd = MathUtil.gcd(12, 18);
// 输出: 6

int gcd2 = MathUtil.gcd(0, 5);
// 输出: 5

注意:两个数必须都是非负数

# multiple(int m, int n)

计算两个数的最小公倍数

int lcm = MathUtil.multiple(12, 18);
// 输出: 36

int lcm2 = MathUtil.multiple(5, 7);
// 输出: 35

# 其他数学计算

# sqrt(long x)

计算平方根

long sqrt = MathUtil.sqrt(16);
// 输出: 4

long sqrt2 = MathUtil.sqrt(25);
// 输出: 5

注意:此方法返回long类型,只适用于完全平方数。对于一般情况,推荐使用Math.sqrt(double)

# processMultiple(int selectNum, int minNum)

计算双色球、大乐透等彩票的注数

// 选7个红球,最少中5个的注数
int notes = MathUtil.processMultiple(7, 5);
// 输出: 21

# 注意事项

  1. 阶乘计算:

    • factorial(long n)方法只支持n在0-20之间,超过20会导致long类型溢出
    • 对于大数值阶乘,建议使用factorial(BigInteger n)方法
  2. 排列组合:

    • 排列组合的结果可能会很大,超出long类型的范围
    • 对于大数值的排列组合,建议使用其他方法或库
  3. 最大公约数和最小公倍数:

    • 两个数必须都是非负数
    • 最小公倍数可能会导致int类型溢出,此时会抛出异常
  4. 金额转换:

    • 元转分时,会自动处理小数位数,确保精度
    • 分转元时,会将分转换为元,保留两位小数

# 总结

MathUtil提供了丰富的数学计算功能,涵盖了排列组合、阶乘计算、金额转换、最大公约数和最小公倍数等多个方面。通过使用MathUtil,可以简化复杂的数学计算,提高开发效率。

无论是在游戏开发、数据分析还是日常开发中,MathUtil都能提供简洁高效的数学计算解决方案。

NumberUtil
BitStatusUtil

← NumberUtil BitStatusUtil→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式