Class MathKit


public class MathKit extends NumberValidator
数字工具类 对于精确值计算应该使用 BigDecimal JDK7中BigDecimal(double val)构造方法的结果有一定的不可预知性,例如:
 new BigDecimal(0.1)和 BigDecimal.valueOf(0.1)
 

表示的不是0.1而是0.1000000000000000055511151231257827021181583404541015625

这是因为0.1无法准确的表示为double。因此应该使用new BigDecimal(String)

相关介绍:
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • MathKit

      public MathKit()
  • Method Details

    • add

      public static BigDecimal add(Number... values)
      提供精确的加法运算 如果传入多个值为null或者空,则返回0
      Parameters:
      values - 多个被加值
      Returns:
    • add

      public static BigDecimal add(String... values)
      提供精确的加法运算 如果传入多个值为null或者空,则返回

      需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如: 德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数 也就是说,在这些国家地区,1.20表示120,而非1.2。

      Parameters:
      values - 多个被加值
      Returns:
    • sub

      public static BigDecimal sub(Number... values)
      提供精确的减法运算 如果传入多个值为null或者空,则返回0
      Parameters:
      values - 多个被减值
      Returns:
    • sub

      public static BigDecimal sub(String... values)
      提供精确的减法运算 如果传入多个值为null或者空,则返回0
      Parameters:
      values - 多个被减值
      Returns:
    • mul

      public static BigDecimal mul(Number... values)
      提供精确的乘法运算 如果传入多个值为null或者空,则返回0
      Parameters:
      values - 多个被乘值
      Returns:
    • mul

      public static BigDecimal mul(String... values)
      提供精确的乘法运算 如果传入多个值为null或者空,则返回0
      Parameters:
      values - 多个被乘值
      Returns:
    • div

      public static BigDecimal div(Number v1, Number v2)
      提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
      Parameters:
      v1 - 被除数
      v2 - 除数
      Returns:
      两个参数的商
    • div

      public static BigDecimal div(String v1, String v2)
      提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
      Parameters:
      v1 - 被除数
      v2 - 除数
      Returns:
      两个参数的商
    • div

      public static BigDecimal div(Number v1, Number v2, int scale)
      提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
      Parameters:
      v1 - 被除数
      v2 - 除数
      scale - 精确度,如果为负值,取绝对值
      Returns:
      两个参数的商
    • div

      public static BigDecimal div(String v1, String v2, int scale)
      提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入
      Parameters:
      v1 - 被除数
      v2 - 除数
      scale - 精确度,如果为负值,取绝对值
      Returns:
      两个参数的商
    • div

      public static BigDecimal div(String v1, String v2, int scale, RoundingMode roundingMode)
      提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
      Parameters:
      v1 - 被除数
      v2 - 除数
      scale - 精确度,如果为负值,取绝对值
      roundingMode - 保留小数的模式 RoundingMode
      Returns:
      两个参数的商
    • div

      public static BigDecimal div(Number v1, Number v2, int scale, RoundingMode roundingMode)
      提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度
      Parameters:
      v1 - 被除数
      v2 - 除数
      scale - 精确度,如果为负值,取绝对值
      roundingMode - 保留小数的模式 RoundingMode
      Returns:
      两个参数的商
    • ceilDiv

      public static int ceilDiv(int v1, int v2)
      补充Math.ceilDiv() JDK8中添加了和 Math.floorDiv(int, int) 但却没有ceilDiv()
      Parameters:
      v1 - 被除数
      v2 - 除数
      Returns:
      两个参数的商
    • round

      public static BigDecimal round(double v, int scale)
      保留固定位数小数 采用四舍五入策略 RoundingMode.HALF_UP 例如保留2位小数:123.456789 = 123.46
      Parameters:
      v - 值
      scale - 保留小数位数
      Returns:
      新值
    • roundString

      public static String roundString(double v, int scale)
      保留固定位数小数 采用四舍五入策略 RoundingMode.HALF_UP 例如保留2位小数:123.456789 = 123.46
      Parameters:
      v - 值
      scale - 保留小数位数
      Returns:
      新值
    • round

      public static BigDecimal round(BigDecimal number, int scale)
      保留固定位数小数 采用四舍五入策略 RoundingMode.HALF_UP 例如保留2位小数:123.456789 = 123.46
      Parameters:
      number - 数字值
      scale - 保留小数位数
      Returns:
      新值
    • roundString

      public static String roundString(String numberStr, int scale)
      保留固定位数小数 采用四舍五入策略 RoundingMode.HALF_UP 例如保留2位小数:123.456789 = 123.46
      Parameters:
      numberStr - 数字值的字符串表现形式
      scale - 保留小数位数
      Returns:
      新值
    • round

      public static BigDecimal round(double v, int scale, RoundingMode roundingMode)
      保留固定位数小数 例如保留四位小数:123.456789 = 123.4567
      Parameters:
      v - 值
      scale - 保留小数位数
      roundingMode - 保留小数的模式 RoundingMode
      Returns:
      新值
    • roundString

      public static String roundString(double v, int scale, RoundingMode roundingMode)
      保留固定位数小数 例如保留四位小数:123.456789 = 123.4567
      Parameters:
      v - 值
      scale - 保留小数位数
      roundingMode - 保留小数的模式 RoundingMode
      Returns:
      新值
    • round

      public static BigDecimal round(BigDecimal number, int scale, RoundingMode roundingMode)
      保留固定位数小数 例如保留四位小数:123.456789 = 123.4567
      Parameters:
      number - 数字值
      scale - 保留小数位数,如果传入小于0,则默认0
      roundingMode - 保留小数的模式 RoundingMode,如果传入null则默认四舍五入
      Returns:
      新值
    • roundString

      public static String roundString(String numberStr, int scale, RoundingMode roundingMode)
      保留固定位数小数 例如保留四位小数:123.456789 = 123.4567
      Parameters:
      numberStr - 数字值的字符串表现形式
      scale - 保留小数位数
      roundingMode - 保留小数的模式 RoundingMode
      Returns:
      新值
    • roundHalfEven

      public static BigDecimal roundHalfEven(Number number, int scale)
      四舍六入五成双计算法

      四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则。

       算法规则:
       四舍六入五考虑,
       五后非零就进一,
       五后皆零看奇偶,
       五前为偶应舍去,
       五前为奇要进一。
       
      Parameters:
      number - 需要科学计算的数据
      scale - 保留的小数位
      Returns:
      结果
    • roundDown

      public static BigDecimal roundDown(Number number, int scale)
      保留固定小数位数,舍去多余位数
      Parameters:
      number - 需要科学计算的数据
      scale - 保留的小数位
      Returns:
      结果
    • format

      public static String format(String pattern, double value)
      格式化double 对 DecimalFormat 做封装
      Parameters:
      pattern - 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
      • 0 = 取一位整数
      • 0.00 = 取一位整数和两位小数
      • 00.000 = 取两位整数和三位小数
      • # = 取所有整数部分
      • #.##% = 以百分比方式计数,并取两位小数
      • #.#####E0 = 显示为科学计数法,并取五位小数
      • ,### = 每三位以逗号进行分隔,例如:299,792,458
      • 光速大小为每秒,###米 = 将格式嵌入文本
      value - 值
      Returns:
      格式化后的值
    • format

      public static String format(String pattern, long value)
      格式化double 对 DecimalFormat 做封装
      Parameters:
      pattern - 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
      • 0 = 取一位整数
      • 0.00 = 取一位整数和两位小数
      • 00.000 = 取两位整数和三位小数
      • # = 取所有整数部分
      • #.##% = 以百分比方式计数,并取两位小数
      • #.#####E0 = 显示为科学计数法,并取五位小数
      • ,### = 每三位以逗号进行分隔,例如:299,792,458
      • 光速大小为每秒,###米 = 将格式嵌入文本
      value - 值
      Returns:
      格式化后的值
    • format

      public static String format(String pattern, Object value)
      格式化double 对 DecimalFormat 做封装
      Parameters:
      pattern - 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
      • 0 = 取一位整数
      • 0.00 = 取一位整数和两位小数
      • 00.000 = 取两位整数和三位小数
      • # = 取所有整数部分
      • #.##% = 以百分比方式计数,并取两位小数
      • #.#####E0 = 显示为科学计数法,并取五位小数
      • ,### = 每三位以逗号进行分隔,例如:299,792,458
      • 光速大小为每秒,###米 = 将格式嵌入文本
      value - 值,支持BigDecimal、BigInteger、Number等类型
      Returns:
      格式化后的值
    • format

      public static String format(String pattern, Object value, RoundingMode roundingMode)
      格式化double 对 DecimalFormat 做封装
      Parameters:
      pattern - 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
      • 0 = 取一位整数
      • 0.00 = 取一位整数和两位小数
      • 00.000 = 取两位整数和三位小数
      • # = 取所有整数部分
      • #.##% = 以百分比方式计数,并取两位小数
      • #.#####E0 = 显示为科学计数法,并取五位小数
      • ,### = 每三位以逗号进行分隔,例如:299,792,458
      • 光速大小为每秒,###米 = 将格式嵌入文本
      value - 值,支持BigDecimal、BigInteger、Number等类型
      roundingMode - 保留小数的方式枚举
      Returns:
      格式化后的值
    • formatMoney

      public static String formatMoney(double value)
      格式化金额输出,每三位用逗号分隔
      Parameters:
      value - 金额
      Returns:
      格式化后的值
    • formatPercent

      public static String formatPercent(double number, int scale)
      格式化百分比,小数采用四舍五入方式
      Parameters:
      number - 值
      scale - 保留小数位数
      Returns:
      百分比
    • formatThousands

      public static String formatThousands(double number, int scale)
      格式化千分位表示方式,小数采用四舍五入方式
      Parameters:
      number - 值
      scale - 保留小数位数
      Returns:
      千分位数字
    • range

      public static int[] range(int stopIncluded)
      生成一个从0开始的数字列表
      Parameters:
      stopIncluded - 结束的数字(不包含)
      Returns:
      数字列表
    • range

      public static int[] range(int startInclude, int stopIncluded)
      生成一个数字列表 自动判定正序反序
      Parameters:
      startInclude - 开始的数字(包含)
      stopIncluded - 结束的数字(包含)
      Returns:
      数字列表
    • range

      public static int[] range(int startInclude, int stopIncluded, int step)
      生成一个数字列表 自动判定正序反序
      Parameters:
      startInclude - 开始的数字(包含)
      stopIncluded - 结束的数字(不包含)
      step - 步进
      Returns:
      数字列表
    • appendRange

      public static Collection<Integer> appendRange(int start, int stop, Collection<Integer> values)
      将给定范围内的整数添加到已有集合中,步进为1
      Parameters:
      start - 开始(包含)
      stop - 结束(包含)
      values - 集合
      Returns:
      集合
    • appendRange

      public static Collection<Integer> appendRange(int startInclude, int stopInclude, int step, Collection<Integer> values)
      将给定范围内的整数添加到已有集合中
      Parameters:
      startInclude - 开始(包含)
      stopInclude - 结束(包含)
      step - 步进
      values - 集合
      Returns:
      集合
    • getBinaryString

      public static String getBinaryString(Number number)
      获得数字对应的二进制字符串
      Parameters:
      number - 数字
      Returns:
      二进制字符串
    • binaryToInt

      public static int binaryToInt(String binaryStr)
      二进制转int
      Parameters:
      binaryStr - 二进制字符串
      Returns:
      int
    • binaryToLong

      public static long binaryToLong(String binaryStr)
      二进制转long
      Parameters:
      binaryStr - 二进制字符串
      Returns:
      long
    • equals

      public static boolean equals(Number number1, Number number2)
      比较数字值是否相等,相等返回true 需要注意的是BigDecimal需要特殊处理 BigDecimal使用compareTo方式判断,因为使用equals方法也判断小数位数,如2.0和2.00就不相等, 此方法判断值相等时忽略精度的,即0.00 == 0
      Parameters:
      number1 - 数字1
      number2 - 数字2
      Returns:
      是否相等
      See Also:
    • toString

      public static String toString(Number number, String defaultValue)
      数字转字符串 调用Object.toString(),并去除尾小数点儿后多余的0
      Parameters:
      number - A Number
      defaultValue - 如果number参数为null,返回此默认值
      Returns:
      A String.
    • toString

      public static String toString(Number number)
      数字转字符串 调用Object.toString()BigDecimal.toPlainString(),并去除尾小数点儿后多余的0
      Parameters:
      number - A Number
      Returns:
      A String.
    • toString

      public static String toString(Number number, boolean isStripTrailingZeros)
      数字转字符串 调用Object.toString()BigDecimal.toPlainString(),并去除尾小数点儿后多余的0
      Parameters:
      number - A Number
      isStripTrailingZeros - 是否去除末尾多余0,例如5.0返回5
      Returns:
      A String.
    • toString

      public static String toString(BigDecimal bigDecimal)
      BigDecimal数字转字符串 调用BigDecimal.toPlainString(),并去除尾小数点儿后多余的0
      Parameters:
      bigDecimal - A BigDecimal
      Returns:
      A String.
    • toString

      public static String toString(BigDecimal bigDecimal, boolean isStripTrailingZeros)
      BigDecimal数字转字符串 调用BigDecimal.toPlainString(),可选去除尾小数点儿后多余的0
      Parameters:
      bigDecimal - A BigDecimal
      isStripTrailingZeros - 是否去除末尾多余0,例如5.0返回5
      Returns:
      A String.
    • toBigDecimal

      public static BigDecimal toBigDecimal(Number number)
      数字转BigDecimal Float、Double等有精度问题,转换为字符串后再转换 null转换为0
      Parameters:
      number - 数字
      Returns:
      BigDecimal
    • toBigDecimal

      public static BigDecimal toBigDecimal(String numberStr) throws IllegalArgumentException
      数字转BigDecimal null或""或空白符抛出IllegalArgumentException异常 "NaN"转为BigDecimal.ZERO
      Parameters:
      numberStr - 数字字符串
      Returns:
      BigDecimal
      Throws:
      IllegalArgumentException - null或""或"NaN"或空白符抛出此异常
    • toBigInteger

      public static BigInteger toBigInteger(Number number)
      数字转BigInteger null或"NaN"转换为0
      Parameters:
      number - 数字
      Returns:
      BigInteger
    • toBigInteger

      public static BigInteger toBigInteger(String numberStr)
      数字转BigInteger null或""或空白符转换为0
      Parameters:
      numberStr - 数字字符串
      Returns:
      BigInteger
    • count

      public static int count(int total, int pageSize)
      计算等份个数
           (每份2)12   34  57
           (每份3)123  456 7
           (每份4)1234 567
       
      Parameters:
      total - 总数
      pageSize - 每份的个数
      Returns:
      分成了几份
    • zeroToOne

      public static int zeroToOne(int value)
      如果给定值为0,返回1,否则返回原值
      Parameters:
      value - 值
      Returns:
      1或非0值
    • nullToZero

      public static int nullToZero(Integer number)
      如果给定值为null,返回0,否则返回原值
      Parameters:
      number - 值
      Returns:
      0或非0值
    • nullToZero

      public static long nullToZero(Long number)
      如果给定值为0,返回1,否则返回原值
      Parameters:
      number - 值
      Returns:
      0或非0值
    • nullToZero

      public static double nullToZero(Double number)
      如果给定值为null,返回0,否则返回原值
      Parameters:
      number - 值
      Returns:
      0或非0值
    • nullToZero

      public static float nullToZero(Float number)
      如果给定值为null,返回0,否则返回原值
      Parameters:
      number - 值
      Returns:
      0或非0值
    • nullToZero

      public static short nullToZero(Short number)
      如果给定值为null,返回0,否则返回原值
      Parameters:
      number - 值
      Returns:
      0或非0值
    • nullToZero

      public static byte nullToZero(Byte number)
      如果给定值为null,返回0,否则返回原值
      Parameters:
      number - 值
      Returns:
      0或非0值
    • nullToZero

      public static BigInteger nullToZero(BigInteger number)
      如果给定值为null,返回0,否则返回原值
      Parameters:
      number - 值
      Returns:
      0或非0值
    • nullToZero

      public static BigDecimal nullToZero(BigDecimal decimal)
      如果给定值为null,返回0,否则返回原值
      Parameters:
      decimal - BigDecimal,可以为null
      Returns:
      BigDecimal参数为空时返回0的值
    • parseBigInteger

      public static BigInteger parseBigInteger(String numberStr)
      创建BigInteger,支持16进制、10进制和8进制,如果传入空白串返回null from Apache Common Lang
      Parameters:
      numberStr - 数字字符串
      Returns:
      BigInteger
    • isBeside

      public static boolean isBeside(long number1, long number2)
      判断两个数字是否相邻,例如1和2相邻,1和3不相邻 判断方法为做差取绝对值判断是否为1
      Parameters:
      number1 - 数字1
      number2 - 数字2
      Returns:
      是否相邻
    • isBeside

      public static boolean isBeside(int number1, int number2)
      判断两个数字是否相邻,例如1和2相邻,1和3不相邻 判断方法为做差取绝对值判断是否为1
      Parameters:
      number1 - 数字1
      number2 - 数字2
      Returns:
      是否相邻
    • partValue

      public static int partValue(int total, int partCount)
      把给定的总数平均分成N份,返回每份的个数 当除以分数有余数时每份+1
      Parameters:
      total - 总数
      partCount - 份数
      Returns:
      每份的个数
    • partValue

      public static int partValue(int total, int partCount, boolean isPlusOneWhenHasRem)
      把给定的总数平均分成N份,返回每份的个数 如果isPlusOneWhenHasRem为true,则当除以分数有余数时每份+1,否则丢弃余数部分
      Parameters:
      total - 总数
      partCount - 份数
      isPlusOneWhenHasRem - 在有余数时是否每份+1
      Returns:
      每份的个数
    • pow

      public static BigDecimal pow(Number number, int n)
      提供精确的幂运算
      Parameters:
      number - 底数
      n - 指数
      Returns:
      幂的积
    • pow

      public static BigDecimal pow(BigDecimal number, int n)
      提供精确的幂运算 如果n为负数,则返回1/a的-n次方,默认四舍五入
      Parameters:
      number - 底数
      n - 指数,如果为负数,则返回1/a的-n次方
      Returns:
      幂的积
    • pow

      public static BigDecimal pow(BigDecimal number, int n, int scale, RoundingMode roundingMode)
      提供精确的幂运算 如果n为负数,则返回1/a的-n次方,默认四舍五入
      Parameters:
      number - 底数
      n - 指数,如果为负数,则返回1/a的-n次方
      scale - 保留小数位数
      roundingMode - 舍入模式
      Returns:
      幂的积
    • isPowerOfTwo

      public static boolean isPowerOfTwo(long n)
      判断一个整数是否是2的幂
      Parameters:
      n - 待验证的整数
      Returns:
      如果n是2的幂返回true, 反之返回false
    • parseInt

      public static Integer parseInt(String numberStr, Integer defaultValue)
      解析转换数字字符串为 Integer 规则如下:
       1、0x开头的视为16进制数字
       2、0开头的忽略开头的0
       3、其它情况按照10进制转换
       4、空串返回0
       5、.123形式返回0(按照小于0的小数对待)
       6、123.56截取小数点之前的数字,忽略小数部分
       7、解析失败返回默认值
       
      Parameters:
      numberStr - 数字字符串,支持0x开头、0开头和普通十进制
      defaultValue - 如果解析失败, 将返回defaultValue, 允许null
      Returns:
      Integer
    • parseInt

      public static int parseInt(String numberStr) throws NumberFormatException
      解析转换数字字符串为int型数字,规则如下:
       1、0x开头的视为16进制数字
       2、0开头的忽略开头的0
       3、其它情况按照10进制转换
       4、空串返回0
       5、.123形式返回0(按照小于0的小数对待)
       6、123.56截取小数点之前的数字,忽略小数部分
       7、科学计数法抛出NumberFormatException异常
       
      Parameters:
      numberStr - 数字,支持0x开头、0开头和普通十进制
      Returns:
      int
      Throws:
      NumberFormatException - 数字格式异常
    • parseLong

      public static Long parseLong(String numberStr, Long defaultValue)
      解析转换数字字符串为 Long 规则如下:
       1、0x开头的视为16进制数字
       2、0开头的忽略开头的0
       3、其它情况按照10进制转换
       4、空串返回0
       5、.123形式返回0(按照小于0的小数对待)
       6、123.56截取小数点之前的数字,忽略小数部分
       7、解析失败返回默认值
       
      Parameters:
      numberStr - 数字字符串,支持0x开头、0开头和普通十进制
      defaultValue - 如果解析失败, 将返回defaultValue, 允许null
      Returns:
      Long
    • parseLong

      public static long parseLong(String numberStr)
      解析转换数字字符串为long型数字,规则如下:
       1、0x开头的视为16进制数字
       2、0开头的忽略开头的0
       3、空串返回0
       4、其它情况按照10进制转换
       5、.123形式返回0(按照小于0的小数对待)
       6、123.56截取小数点之前的数字,忽略小数部分
       
      Parameters:
      numberStr - 数字,支持0x开头、0开头和普通十进制
      Returns:
      long
    • parseFloat

      public static Float parseFloat(String numberStr, Float defaultValue)
      解析转换数字字符串为 Float 规则如下:
       1、0开头的忽略开头的0
       2、空串返回0
       3、其它情况按照10进制转换
       4、.123形式返回0.123(按照小于0的小数对待)
       
      Parameters:
      numberStr - 数字字符串,支持0x开头、0开头和普通十进制
      defaultValue - 如果解析失败, 将返回defaultValue, 允许null
      Returns:
      Float
    • parseFloat

      public static float parseFloat(String numberStr)
      解析转换数字字符串为long型数字,规则如下:
       1、0开头的忽略开头的0
       2、空串返回0
       3、其它情况按照10进制转换
       4、.123形式返回0.123(按照小于0的小数对待)
       
      Parameters:
      numberStr - 数字,支持0x开头、0开头和普通十进制
      Returns:
      long
    • parseDouble

      public static Double parseDouble(String numberStr, Double defaultValue)
      解析转换数字字符串为 Double 规则如下:
       1、0开头的忽略开头的0
       2、空串返回0
       3、其它情况按照10进制转换
       4、.123形式返回0.123(按照小于0的小数对待)
       
      Parameters:
      numberStr - 数字字符串,支持0x开头、0开头和普通十进制
      defaultValue - 如果解析失败, 将返回defaultValue, 允许null
      Returns:
      Double
    • parseDouble

      public static double parseDouble(String numberStr)
      解析转换数字字符串为long型数字,规则如下:
       1、0开头的忽略开头的0
       2、空串返回0
       3、其它情况按照10进制转换
       4、.123形式返回0.123(按照小于0的小数对待)
       5、NaN返回0
       
      Parameters:
      numberStr - 数字,支持0x开头、0开头和普通十进制
      Returns:
      double
    • parseNumber

      public static Number parseNumber(String numberStr, Number defaultValue)
      将指定字符串转换为Number 此方法不支持科学计数法
      Parameters:
      numberStr - Number字符串
      defaultValue - 如果解析失败, 将返回defaultValue, 允许null
      Returns:
      Number对象
    • parseNumber

      public static Number parseNumber(String numberStr) throws NumberFormatException
      将指定字符串转换为Number 对象 此方法不支持科学计数法

      需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如: 德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数 也就是说,在这些国家地区,1.20表示120,而非1.2。

      Parameters:
      numberStr - Number字符串
      Returns:
      Number对象
      Throws:
      NumberFormatException - 包装了ParseException,当给定的数字字符串无法解析时抛出
    • parseNumber

      public static Number parseNumber(String numberStr, Locale locale) throws NumberFormatException
      将指定字符串转换为Number 对象 此方法不支持科学计数法

      需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如: 德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数 也就是说,在这些国家地区,1.20表示120,而非1.2。

      Parameters:
      numberStr - Number字符串
      locale - 地区,不同地区数字表示方式不同
      Returns:
      Number对象
      Throws:
      NumberFormatException - 包装了ParseException,当给定的数字字符串无法解析时抛出
    • isValidNumber

      public static boolean isValidNumber(Number number)
      检查是否为有效的数字 检查Double和Float是否为无限大,或者Not a Number 非数字类型和null将返回false
      Parameters:
      number - 被检查类型
      Returns:
      检查结果,非数字类型和Null将返回true
    • isValid

      public static boolean isValid(double number)
      检查是否为有效的数字 检查double否为无限大,或者Not a Number(NaN)
      Parameters:
      number - 被检查double
      Returns:
      检查结果
    • isValid

      public static boolean isValid(float number)
      检查是否为有效的数字 检查double否为无限大,或者Not a Number(NaN)
      Parameters:
      number - 被检查double
      Returns:
      检查结果
    • calculate

      public static double calculate(String expression)
      计算数学表达式的值,只支持加减乘除和取余 如:
         calculate("(0*1--3)-5/-4-(3*(-2.13))") - 10.64
       
      Parameters:
      expression - 数学表达式
      Returns:
      结果
    • toDouble

      public static double toDouble(Number value)
      Number值转换为double float强制转换存在精度问题,此方法避免精度丢失
      Parameters:
      value - 被转换的float值
      Returns:
      double值
    • isOdd

      public static boolean isOdd(int num)
      检查是否为奇数
      Parameters:
      num - 被判断的数值
      Returns:
      是否是奇数
    • isEven

      public static boolean isEven(int num)
      检查是否为偶数
      Parameters:
      num - 被判断的数值
      Returns:
      是否是偶数
    • isZero

      public static boolean isZero(Number n)
      判断给定数字是否为0
      Parameters:
      n - 数字
      Returns:
      是否为0
    • intToRoman

      public static String intToRoman(int num)
      整数转罗马数字 限制:[1,3999]的正整数
      • I 1
      • V 5
      • X 10
      • L 50
      • C 100
      • D 500
      • M 1000
      Parameters:
      num - [1,3999]的正整数
      Returns:
      罗马数字
    • romanToInt

      public static int romanToInt(String roman)
      罗马数字转整数
      Parameters:
      roman - 罗马字符
      Returns:
      整数
      Throws:
      IllegalArgumentException - 如果传入非罗马字符串,抛出异常
    • arrangementCount

      public static long arrangementCount(int n, int m)
      计算排列数,即A(n, m) = n!/(n-m)!
      Parameters:
      n - 总数
      m - 选择的个数
      Returns:
      排列数
    • arrangementCount

      public static long arrangementCount(int n)
      计算排列数,即A(n, n) = n!
      Parameters:
      n - 总数
      Returns:
      排列数
    • arrangementSelect

      public static List<String[]> arrangementSelect(String[] datas, int m)
      排列选择(从列表中选择n个排列)
      Parameters:
      datas - 待选列表
      m - 选择个数
      Returns:
      所有排列列表
    • arrangementSelect

      public static List<String[]> arrangementSelect(String[] datas)
      全排列选择(列表全部参与排列)
      Parameters:
      datas - 待选列表
      Returns:
      所有排列列表
    • combinationCount

      public static long combinationCount(int n, int m)
      计算组合数,即C(n, m) = n!/((n-m)!* m!)
      Parameters:
      n - 总数
      m - 选择的个数
      Returns:
      组合数
    • combinationSelect

      public static List<String[]> combinationSelect(String[] datas, int m)
      组合选择(从列表中选择n个组合)
      Parameters:
      datas - 待选列表
      m - 选择个数
      Returns:
      所有组合列表
    • yuanToCent

      public static long yuanToCent(double yuan)
      金额元转换为分
      Parameters:
      yuan - 金额,单位元
      Returns:
      金额,单位分
    • centToYuan

      public static double centToYuan(long cent)
      金额分转换为元
      Parameters:
      cent - 金额,单位分
      Returns:
      金额,单位元
    • factorial

      public static BigInteger factorial(BigInteger n)
      计算阶乘

      n!= n * (n-1) * ... * 2 * 1

      Parameters:
      n - 阶乘起始
      Returns:
      结果
    • factorial

      public static BigInteger factorial(BigInteger start, BigInteger end)
      计算范围阶乘

      factorial(start, end) = start * (start - 1) * ... * (end + 1)

      Parameters:
      start - 阶乘起始(包含)
      end - 阶乘结束,必须小于起始(不包括)
      Returns:
      结果
    • factorial

      public static long factorial(long start, long end)
      计算范围阶乘

      factorial(start, end) = start * (start - 1) * ... * (end + 1)

      Parameters:
      start - 阶乘起始(包含)
      end - 阶乘结束,必须小于起始(不包括)
      Returns:
      结果
    • factorial

      public static long factorial(long n)
      计算阶乘

      n!= n * (n-1) * ... * 2 * 1

      Parameters:
      n - 阶乘起始
      Returns:
      结果
    • sqrt

      public static long sqrt(long x)
      平方根算法 推荐使用 Math.sqrt(double)
      Parameters:
      x - 值
      Returns:
      平方根
    • processMultiple

      public static int processMultiple(int selectNum, int minNum)
      可以用于计算双色球、大乐透注数的方法 比如大乐透35选5可以这样调用processMultiple(7,5); 就是数学中的:C75=7*6/2*1
      Parameters:
      selectNum - 选中小球个数
      minNum - 最少要选中多少个小球
      Returns:
      注数
    • gcd

      public static int gcd(int a, int b)
      最大公约数 见:https://stackoverflow.com/questions/4009198/java-get-greatest-common-divisor 来自Guava的IntMath.gcd
      Parameters:
      a - 第一个值
      b - 第二个值
      Returns:
      最大公约数
    • multiple

      public static int multiple(int m, int n)
      最小公倍数
      Parameters:
      m - 第一个值
      n - 第二个值
      Returns:
      最小公倍数