Package org.miaixz.bus.core.xyz
Class MathKit
java.lang.Object
org.miaixz.bus.core.math.NumberValidator
org.miaixz.bus.core.xyz.MathKit
数字工具类 对于精确值计算应该使用
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
-
Field Summary
Fields inherited from class org.miaixz.bus.core.math.NumberValidator
DOUBLE_EPSILON, FLOAT_EPSILON -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic BigDecimal提供精确的加法运算 如果传入多个值为null或者空,则返回0static BigDecimal提供精确的加法运算 如果传入多个值为null或者空,则返回static Collection<Integer> appendRange(int startInclude, int stopInclude, int step, Collection<Integer> values) 将给定范围内的整数添加到已有集合中static Collection<Integer> appendRange(int start, int stop, Collection<Integer> values) 将给定范围内的整数添加到已有集合中,步进为1static longarrangementCount(int n) 计算排列数,即A(n, n) = n!static longarrangementCount(int n, int m) 计算排列数,即A(n, m) = n!/(n-m)!arrangementSelect(String[] datas) 全排列选择(列表全部参与排列)arrangementSelect(String[] datas, int m) 排列选择(从列表中选择n个排列)static intbinaryToInt(String binaryStr) 二进制转intstatic longbinaryToLong(String binaryStr) 二进制转longstatic double计算数学表达式的值,只支持加减乘除和取余 如:static intceilDiv(int v1, int v2) 补充Math.ceilDiv() JDK8中添加了和Math.floorDiv(int, int)但却没有ceilDiv()static doublecentToYuan(long cent) 金额分转换为元static longcombinationCount(int n, int m) 计算组合数,即C(n, m) = n!/((n-m)!* m!)combinationSelect(String[] datas, int m) 组合选择(从列表中选择n个组合)static intcount(int total, int pageSize) 计算等份个数static BigDecimal提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入static BigDecimal提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入static BigDecimaldiv(Number v1, Number v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度static BigDecimal提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入static BigDecimal提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入static BigDecimaldiv(String v1, String v2, int scale, RoundingMode roundingMode) 提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度static boolean比较数字值是否相等,相等返回true需要注意的是BigDecimal需要特殊处理 BigDecimal使用compareTo方式判断,因为使用equals方法也判断小数位数,如2.0和2.00就不相等, 此方法判断值相等时忽略精度的,即0.00 == 0 如果用户提供两个Number都是BigDecimal,则通过调用BigDecimal.compareTo(BigDecimal)方法来判断是否相等 其他情况调用Object.equals(Object)比较static longfactorial(long n) 计算阶乘static longfactorial(long start, long end) 计算范围阶乘static BigInteger计算阶乘static BigIntegerfactorial(BigInteger start, BigInteger end) 计算范围阶乘static String格式化double 对DecimalFormat做封装static String格式化double 对DecimalFormat做封装static String格式化double 对DecimalFormat做封装static Stringformat(String pattern, Object value, RoundingMode roundingMode) 格式化double 对DecimalFormat做封装static StringformatMoney(double value) 格式化金额输出,每三位用逗号分隔static StringformatPercent(double number, int scale) 格式化百分比,小数采用四舍五入方式static StringformatThousands(double number, int scale) 格式化千分位表示方式,小数采用四舍五入方式static intgcd(int a, int b) 最大公约数 见:https://stackoverflow.com/questions/4009198/java-get-greatest-common-divisor 来自Guava的IntMath.gcdstatic StringgetBinaryString(Number number) 获得数字对应的二进制字符串static StringintToRoman(int num) 整数转罗马数字 限制:[1,3999]的正整数 I 1 V 5 X 10 L 50 C 100 D 500 M 1000static booleanisBeside(int number1, int number2) 判断两个数字是否相邻,例如1和2相邻,1和3不相邻 判断方法为做差取绝对值判断是否为1static booleanisBeside(long number1, long number2) 判断两个数字是否相邻,例如1和2相邻,1和3不相邻 判断方法为做差取绝对值判断是否为1static booleanisEven(int num) 检查是否为偶数static booleanisOdd(int num) 检查是否为奇数static booleanisPowerOfTwo(long n) 判断一个整数是否是2的幂static booleanisValid(double number) 检查是否为有效的数字 检查double否为无限大,或者Not a Number(NaN)static booleanisValid(float number) 检查是否为有效的数字 检查double否为无限大,或者Not a Number(NaN)static booleanisValidNumber(Number number) 检查是否为有效的数字 检查Double和Float是否为无限大,或者Not a Number 非数字类型和null将返回falsestatic boolean判断给定数字是否为0 如果是Byte、Short、Integer、Long,直接转为long和0L比较 如果是BigInteger,使用BigInteger.equals(Object)如果是Float,转为float与0f比较 如果是Double,转为double与0d比较 其它情况转为BigDecimal与BigDecimal.ZERO比较大小(使用compare)static BigDecimal提供精确的乘法运算 如果传入多个值为null或者空,则返回0static BigDecimal提供精确的乘法运算 如果传入多个值为null或者空,则返回0static intmultiple(int m, int n) 最小公倍数static bytenullToZero(Byte number) 如果给定值为null,返回0,否则返回原值static doublenullToZero(Double number) 如果给定值为null,返回0,否则返回原值static floatnullToZero(Float number) 如果给定值为null,返回0,否则返回原值static intnullToZero(Integer number) 如果给定值为null,返回0,否则返回原值static longnullToZero(Long number) 如果给定值为0,返回1,否则返回原值static shortnullToZero(Short number) 如果给定值为null,返回0,否则返回原值static BigDecimalnullToZero(BigDecimal decimal) 如果给定值为null,返回0,否则返回原值static BigIntegernullToZero(BigInteger number) 如果给定值为null,返回0,否则返回原值static BigIntegerparseBigInteger(String numberStr) 创建BigInteger,支持16进制、10进制和8进制,如果传入空白串返回null from Apache Common Langstatic doubleparseDouble(String numberStr) 解析转换数字字符串为long型数字,规则如下:static DoubleparseDouble(String numberStr, Double defaultValue) 解析转换数字字符串为Double规则如下:static floatparseFloat(String numberStr) 解析转换数字字符串为long型数字,规则如下:static FloatparseFloat(String numberStr, Float defaultValue) 解析转换数字字符串为Float规则如下:static int解析转换数字字符串为int型数字,规则如下:static Integer解析转换数字字符串为Integer规则如下:static long解析转换数字字符串为long型数字,规则如下:static Long解析转换数字字符串为Long规则如下:static NumberparseNumber(String numberStr) 将指定字符串转换为Number对象 此方法不支持科学计数法static NumberparseNumber(String numberStr, Number defaultValue) 将指定字符串转换为Number此方法不支持科学计数法static NumberparseNumber(String numberStr, Locale locale) 将指定字符串转换为Number对象 此方法不支持科学计数法static intpartValue(int total, int partCount) 把给定的总数平均分成N份,返回每份的个数 当除以分数有余数时每份+1static intpartValue(int total, int partCount, boolean isPlusOneWhenHasRem) 把给定的总数平均分成N份,返回每份的个数 如果isPlusOneWhenHasRem为true,则当除以分数有余数时每份+1,否则丢弃余数部分static BigDecimal提供精确的幂运算static BigDecimalpow(BigDecimal number, int n) 提供精确的幂运算 如果n为负数,则返回1/a的-n次方,默认四舍五入static BigDecimalpow(BigDecimal number, int n, int scale, RoundingMode roundingMode) 提供精确的幂运算 如果n为负数,则返回1/a的-n次方,默认四舍五入static intprocessMultiple(int selectNum, int minNum) 可以用于计算双色球、大乐透注数的方法 比如大乐透35选5可以这样调用processMultiple(7,5); 就是数学中的:C75=7*6/2*1static int[]range(int stopIncluded) 生成一个从0开始的数字列表static int[]range(int startInclude, int stopIncluded) 生成一个数字列表 自动判定正序反序static int[]range(int startInclude, int stopIncluded, int step) 生成一个数字列表 自动判定正序反序static intromanToInt(String roman) 罗马数字转整数static BigDecimalround(double v, int scale) 保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46static BigDecimalround(double v, int scale, RoundingMode roundingMode) 保留固定位数小数 例如保留四位小数:123.456789 = 123.4567static BigDecimalround(BigDecimal number, int scale) 保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46static BigDecimalround(BigDecimal number, int scale, RoundingMode roundingMode) 保留固定位数小数 例如保留四位小数:123.456789 = 123.4567static BigDecimal保留固定小数位数,舍去多余位数static BigDecimalroundHalfEven(Number number, int scale) 四舍六入五成双计算法static StringroundString(double v, int scale) 保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46static StringroundString(double v, int scale, RoundingMode roundingMode) 保留固定位数小数 例如保留四位小数:123.456789 = 123.4567static StringroundString(String numberStr, int scale) 保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46static StringroundString(String numberStr, int scale, RoundingMode roundingMode) 保留固定位数小数 例如保留四位小数:123.456789 = 123.4567static longsqrt(long x) 平方根算法 推荐使用Math.sqrt(double)static BigDecimal提供精确的减法运算 如果传入多个值为null或者空,则返回0static BigDecimal提供精确的减法运算 如果传入多个值为null或者空,则返回0static BigDecimaltoBigDecimal(Number number) 数字转BigDecimalFloat、Double等有精度问题,转换为字符串后再转换 null转换为0static BigDecimaltoBigDecimal(String numberStr) static BigIntegertoBigInteger(Number number) 数字转BigIntegernull或"NaN"转换为0static BigIntegertoBigInteger(String numberStr) 数字转BigIntegernull或""或空白符转换为0static doubleNumber值转换为double float强制转换存在精度问题,此方法避免精度丢失static String数字转字符串 调用Object.toString()或BigDecimal.toPlainString(),并去除尾小数点儿后多余的0static String数字转字符串 调用Object.toString()或BigDecimal.toPlainString(),并去除尾小数点儿后多余的0static String数字转字符串 调用Object.toString(),并去除尾小数点儿后多余的0static StringtoString(BigDecimal bigDecimal) BigDecimal数字转字符串 调用BigDecimal.toPlainString(),并去除尾小数点儿后多余的0static StringtoString(BigDecimal bigDecimal, boolean isStripTrailingZeros) BigDecimal数字转字符串 调用BigDecimal.toPlainString(),可选去除尾小数点儿后多余的0static longyuanToCent(double yuan) 金额元转换为分static intzeroToOne(int value) 如果给定值为0,返回1,否则返回原值Methods inherited from class org.miaixz.bus.core.math.NumberValidator
isDifferent, isDifferent, isDifferentFromZero, isDifferentFromZero, isDouble, isEqual, isEqual, isEqualToZero, isEqualToZero, isInteger, isLong, isNumber, isPrime
-
Constructor Details
-
MathKit
public MathKit()
-
-
Method Details
-
add
提供精确的加法运算 如果传入多个值为null或者空,则返回0- Parameters:
values- 多个被加值- Returns:
- 和
-
add
提供精确的加法运算 如果传入多个值为null或者空,则返回需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如: 德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数 也就是说,在这些国家地区,1.20表示120,而非1.2。
- Parameters:
values- 多个被加值- Returns:
- 和
-
sub
提供精确的减法运算 如果传入多个值为null或者空,则返回0- Parameters:
values- 多个被减值- Returns:
- 差
-
sub
提供精确的减法运算 如果传入多个值为null或者空,则返回0- Parameters:
values- 多个被减值- Returns:
- 差
-
mul
提供精确的乘法运算 如果传入多个值为null或者空,则返回0- Parameters:
values- 多个被乘值- Returns:
- 积
-
mul
提供精确的乘法运算 如果传入多个值为null或者空,则返回0- Parameters:
values- 多个被乘值- Returns:
- 积
-
div
提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入- Parameters:
v1- 被除数v2- 除数- Returns:
- 两个参数的商
-
div
提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入- Parameters:
v1- 被除数v2- 除数- Returns:
- 两个参数的商
-
div
提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入- Parameters:
v1- 被除数v2- 除数scale- 精确度,如果为负值,取绝对值- Returns:
- 两个参数的商
-
div
提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度,后面的四舍五入- Parameters:
v1- 被除数v2- 除数scale- 精确度,如果为负值,取绝对值- Returns:
- 两个参数的商
-
div
提供(相对)精确的除法运算,当发生除不尽的情况时,由scale指定精确度- Parameters:
v1- 被除数v2- 除数scale- 精确度,如果为负值,取绝对值roundingMode- 保留小数的模式RoundingMode- Returns:
- 两个参数的商
-
div
提供(相对)精确的除法运算,当发生除不尽的情况时,由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
保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46- Parameters:
v- 值scale- 保留小数位数- Returns:
- 新值
-
roundString
保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46- Parameters:
v- 值scale- 保留小数位数- Returns:
- 新值
-
round
保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46- Parameters:
number- 数字值scale- 保留小数位数- Returns:
- 新值
-
roundString
保留固定位数小数 采用四舍五入策略RoundingMode.HALF_UP例如保留2位小数:123.456789 = 123.46- Parameters:
numberStr- 数字值的字符串表现形式scale- 保留小数位数- Returns:
- 新值
-
round
保留固定位数小数 例如保留四位小数:123.456789 = 123.4567- Parameters:
v- 值scale- 保留小数位数roundingMode- 保留小数的模式RoundingMode- Returns:
- 新值
-
roundString
保留固定位数小数 例如保留四位小数:123.456789 = 123.4567- Parameters:
v- 值scale- 保留小数位数roundingMode- 保留小数的模式RoundingMode- Returns:
- 新值
-
round
保留固定位数小数 例如保留四位小数:123.456789 = 123.4567- Parameters:
number- 数字值scale- 保留小数位数,如果传入小于0,则默认0roundingMode- 保留小数的模式RoundingMode,如果传入null则默认四舍五入- Returns:
- 新值
-
roundString
保留固定位数小数 例如保留四位小数:123.456789 = 123.4567- Parameters:
numberStr- 数字值的字符串表现形式scale- 保留小数位数roundingMode- 保留小数的模式RoundingMode- Returns:
- 新值
-
roundHalfEven
四舍六入五成双计算法四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则。
算法规则: 四舍六入五考虑, 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一。
- Parameters:
number- 需要科学计算的数据scale- 保留的小数位- Returns:
- 结果
-
roundDown
保留固定小数位数,舍去多余位数- Parameters:
number- 需要科学计算的数据scale- 保留的小数位- Returns:
- 结果
-
format
格式化double 对DecimalFormat做封装- Parameters:
pattern- 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。- 0 = 取一位整数
- 0.00 = 取一位整数和两位小数
- 00.000 = 取两位整数和三位小数
- # = 取所有整数部分
- #.##% = 以百分比方式计数,并取两位小数
- #.#####E0 = 显示为科学计数法,并取五位小数
- ,### = 每三位以逗号进行分隔,例如:299,792,458
- 光速大小为每秒,###米 = 将格式嵌入文本
value- 值- Returns:
- 格式化后的值
-
format
格式化double 对DecimalFormat做封装- Parameters:
pattern- 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。- 0 = 取一位整数
- 0.00 = 取一位整数和两位小数
- 00.000 = 取两位整数和三位小数
- # = 取所有整数部分
- #.##% = 以百分比方式计数,并取两位小数
- #.#####E0 = 显示为科学计数法,并取五位小数
- ,### = 每三位以逗号进行分隔,例如:299,792,458
- 光速大小为每秒,###米 = 将格式嵌入文本
value- 值- Returns:
- 格式化后的值
-
format
格式化double 对DecimalFormat做封装- Parameters:
pattern- 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。- 0 = 取一位整数
- 0.00 = 取一位整数和两位小数
- 00.000 = 取两位整数和三位小数
- # = 取所有整数部分
- #.##% = 以百分比方式计数,并取两位小数
- #.#####E0 = 显示为科学计数法,并取五位小数
- ,### = 每三位以逗号进行分隔,例如:299,792,458
- 光速大小为每秒,###米 = 将格式嵌入文本
value- 值,支持BigDecimal、BigInteger、Number等类型- Returns:
- 格式化后的值
-
format
格式化double 对DecimalFormat做封装- Parameters:
pattern- 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。- 0 = 取一位整数
- 0.00 = 取一位整数和两位小数
- 00.000 = 取两位整数和三位小数
- # = 取所有整数部分
- #.##% = 以百分比方式计数,并取两位小数
- #.#####E0 = 显示为科学计数法,并取五位小数
- ,### = 每三位以逗号进行分隔,例如:299,792,458
- 光速大小为每秒,###米 = 将格式嵌入文本
value- 值,支持BigDecimal、BigInteger、Number等类型roundingMode- 保留小数的方式枚举- Returns:
- 格式化后的值
-
formatMoney
格式化金额输出,每三位用逗号分隔- Parameters:
value- 金额- Returns:
- 格式化后的值
-
formatPercent
格式化百分比,小数采用四舍五入方式- Parameters:
number- 值scale- 保留小数位数- Returns:
- 百分比
-
formatThousands
格式化千分位表示方式,小数采用四舍五入方式- 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
将给定范围内的整数添加到已有集合中,步进为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
获得数字对应的二进制字符串- Parameters:
number- 数字- Returns:
- 二进制字符串
-
binaryToInt
二进制转int- Parameters:
binaryStr- 二进制字符串- Returns:
- int
-
binaryToLong
二进制转long- Parameters:
binaryStr- 二进制字符串- Returns:
- long
-
equals
比较数字值是否相等,相等返回true需要注意的是BigDecimal需要特殊处理 BigDecimal使用compareTo方式判断,因为使用equals方法也判断小数位数,如2.0和2.00就不相等, 此方法判断值相等时忽略精度的,即0.00 == 0- 如果用户提供两个Number都是
BigDecimal,则通过调用BigDecimal.compareTo(BigDecimal)方法来判断是否相等 - 其他情况调用
Object.equals(Object)比较
- Parameters:
number1- 数字1number2- 数字2- Returns:
- 是否相等
- See Also:
- 如果用户提供两个Number都是
-
toString
数字转字符串 调用Object.toString(),并去除尾小数点儿后多余的0- Parameters:
number- A NumberdefaultValue- 如果number参数为null,返回此默认值- Returns:
- A String.
-
toString
数字转字符串 调用Object.toString()或BigDecimal.toPlainString(),并去除尾小数点儿后多余的0- Parameters:
number- A Number- Returns:
- A String.
-
toString
数字转字符串 调用Object.toString()或BigDecimal.toPlainString(),并去除尾小数点儿后多余的0- Parameters:
number- A NumberisStripTrailingZeros- 是否去除末尾多余0,例如5.0返回5- Returns:
- A String.
-
toString
BigDecimal数字转字符串 调用BigDecimal.toPlainString(),并去除尾小数点儿后多余的0- Parameters:
bigDecimal- ABigDecimal- Returns:
- A String.
-
toString
BigDecimal数字转字符串 调用BigDecimal.toPlainString(),可选去除尾小数点儿后多余的0- Parameters:
bigDecimal- ABigDecimalisStripTrailingZeros- 是否去除末尾多余0,例如5.0返回5- Returns:
- A String.
-
toBigDecimal
数字转BigDecimalFloat、Double等有精度问题,转换为字符串后再转换 null转换为0- Parameters:
number- 数字- Returns:
BigDecimal
-
toBigDecimal
- Parameters:
numberStr- 数字字符串- Returns:
BigDecimal- Throws:
IllegalArgumentException- null或""或"NaN"或空白符抛出此异常
-
toBigInteger
数字转BigIntegernull或"NaN"转换为0- Parameters:
number- 数字- Returns:
BigInteger
-
toBigInteger
数字转BigIntegernull或""或空白符转换为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
如果给定值为null,返回0,否则返回原值- Parameters:
number- 值- Returns:
- 0或非0值
-
nullToZero
如果给定值为0,返回1,否则返回原值- Parameters:
number- 值- Returns:
- 0或非0值
-
nullToZero
如果给定值为null,返回0,否则返回原值- Parameters:
number- 值- Returns:
- 0或非0值
-
nullToZero
如果给定值为null,返回0,否则返回原值- Parameters:
number- 值- Returns:
- 0或非0值
-
nullToZero
如果给定值为null,返回0,否则返回原值- Parameters:
number- 值- Returns:
- 0或非0值
-
nullToZero
如果给定值为null,返回0,否则返回原值- Parameters:
number- 值- Returns:
- 0或非0值
-
nullToZero
如果给定值为null,返回0,否则返回原值- Parameters:
number- 值- Returns:
- 0或非0值
-
nullToZero
如果给定值为null,返回0,否则返回原值- Parameters:
decimal-BigDecimal,可以为null- Returns:
BigDecimal参数为空时返回0的值
-
parseBigInteger
创建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- 数字1number2- 数字2- Returns:
- 是否相邻
-
isBeside
public static boolean isBeside(int number1, int number2) 判断两个数字是否相邻,例如1和2相邻,1和3不相邻 判断方法为做差取绝对值判断是否为1- Parameters:
number1- 数字1number2- 数字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
提供精确的幂运算- Parameters:
number- 底数n- 指数- Returns:
- 幂的积
-
pow
提供精确的幂运算 如果n为负数,则返回1/a的-n次方,默认四舍五入- Parameters:
number- 底数n- 指数,如果为负数,则返回1/a的-n次方- Returns:
- 幂的积
-
pow
提供精确的幂运算 如果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
解析转换数字字符串为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
解析转换数字字符串为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
解析转换数字字符串为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
解析转换数字字符串为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
解析转换数字字符串为Float规则如下:1、0开头的忽略开头的0 2、空串返回0 3、其它情况按照10进制转换 4、.123形式返回0.123(按照小于0的小数对待)
- Parameters:
numberStr- 数字字符串,支持0x开头、0开头和普通十进制defaultValue- 如果解析失败, 将返回defaultValue, 允许null- Returns:
- Float
-
parseFloat
解析转换数字字符串为long型数字,规则如下:1、0开头的忽略开头的0 2、空串返回0 3、其它情况按照10进制转换 4、.123形式返回0.123(按照小于0的小数对待)
- Parameters:
numberStr- 数字,支持0x开头、0开头和普通十进制- Returns:
- long
-
parseDouble
解析转换数字字符串为Double规则如下:1、0开头的忽略开头的0 2、空串返回0 3、其它情况按照10进制转换 4、.123形式返回0.123(按照小于0的小数对待)
- Parameters:
numberStr- 数字字符串,支持0x开头、0开头和普通十进制defaultValue- 如果解析失败, 将返回defaultValue, 允许null- Returns:
- Double
-
parseDouble
解析转换数字字符串为long型数字,规则如下:1、0开头的忽略开头的0 2、空串返回0 3、其它情况按照10进制转换 4、.123形式返回0.123(按照小于0的小数对待) 5、NaN返回0
- Parameters:
numberStr- 数字,支持0x开头、0开头和普通十进制- Returns:
- double
-
parseNumber
将指定字符串转换为Number此方法不支持科学计数法- Parameters:
numberStr- Number字符串defaultValue- 如果解析失败, 将返回defaultValue, 允许null- Returns:
- Number对象
-
parseNumber
将指定字符串转换为Number对象 此方法不支持科学计数法需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如: 德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数 也就是说,在这些国家地区,1.20表示120,而非1.2。
- Parameters:
numberStr- Number字符串- Returns:
- Number对象
- Throws:
NumberFormatException- 包装了ParseException,当给定的数字字符串无法解析时抛出
-
parseNumber
将指定字符串转换为Number对象 此方法不支持科学计数法需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如: 德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数 也就是说,在这些国家地区,1.20表示120,而非1.2。
- Parameters:
numberStr- Number字符串locale- 地区,不同地区数字表示方式不同- Returns:
- Number对象
- Throws:
NumberFormatException- 包装了ParseException,当给定的数字字符串无法解析时抛出
-
isValidNumber
检查是否为有效的数字 检查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
计算数学表达式的值,只支持加减乘除和取余 如:calculate("(0*1--3)-5/-4-(3*(-2.13))") - 10.64- Parameters:
expression- 数学表达式- Returns:
- 结果
-
toDouble
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
判断给定数字是否为0- 如果是
Byte、Short、Integer、Long,直接转为long和0L比较 - 如果是
BigInteger,使用BigInteger.equals(Object) - 如果是
Float,转为float与0f比较 - 如果是
Double,转为double与0d比较 - 其它情况转为
BigDecimal与BigDecimal.ZERO比较大小(使用compare)
- Parameters:
n- 数字- Returns:
- 是否为0
- 如果是
-
intToRoman
整数转罗马数字 限制:[1,3999]的正整数- I 1
- V 5
- X 10
- L 50
- C 100
- D 500
- M 1000
- Parameters:
num- [1,3999]的正整数- Returns:
- 罗马数字
-
romanToInt
罗马数字转整数- 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
排列选择(从列表中选择n个排列)- Parameters:
datas- 待选列表m- 选择个数- Returns:
- 所有排列列表
-
arrangementSelect
全排列选择(列表全部参与排列)- Parameters:
datas- 待选列表- Returns:
- 所有排列列表
-
combinationCount
public static long combinationCount(int n, int m) 计算组合数,即C(n, m) = n!/((n-m)!* m!)- Parameters:
n- 总数m- 选择的个数- Returns:
- 组合数
-
combinationSelect
组合选择(从列表中选择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
计算阶乘n!= n * (n-1) * ... * 2 * 1
- Parameters:
n- 阶乘起始- Returns:
- 结果
-
factorial
计算范围阶乘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:
- 最小公倍数
-