添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • http://www.oschina.net/code/snippet_563112_25237
  • https://github.com/venusdrogon/feilong-core/wiki/one-jdk7-bug-thinking
  • Author:
    Looly
    比较数字值是否相等,相等返回 true
    需要注意的是 BigDecimal 需要特殊处理
    BigDecimal使用compareTo方式判断,因为使用equals方法也判断小数位数,如2.0和2.00就不相等,
    此方法判断值相等时忽略精度的,即0.00 == 0 如果用户提供两个Number都是 BigDecimal ,则通过调用 BigDecimal.compareTo(BigDecimal) 方法来判断是否相等 其他情况调用 Object.equals(Object) 比较 static BigInteger newBigInteger ( String str)
    创建 BigInteger ,支持16进制、10进制和8进制,如果传入空白串返回null
    from Apache Common Lang
    static BigDecimal null2Zero ( BigDecimal decimal)
    Deprecated. 需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如:
    德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数
    也就是说,在这些国家地区,1.20表示120,而非1.2。
    Parameters:
    v1 - 被加数
    v2 - 加数
    Returns:
    需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如:
    德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数
    也就是说,在这些国家地区,1.20表示120,而非1.2。
    Parameters:
    values - 多个被加值
    Returns:
    Since:
    4.0.0
    public static double div(float v1,
                             double v2)
    提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
    Parameters:
    v1 - 被除数
    v2 - 除数
    Returns:
    两个参数的商
    public static double div(double v1,
                             float v2)
    提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
    Parameters:
    v1 - 被除数
    v2 - 除数
    Returns:
    两个参数的商
    public static double div(double v1,
                             double v2)
    提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
    Parameters:
    v1 - 被除数
    v2 - 除数
    Returns:
    两个参数的商
    public static double div(Double v1,
                             Double v2)
    提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
    Parameters:
    v1 - 被除数
    v2 - 除数
    Returns:
    两个参数的商
    public static BigDecimal div(Number v1,
                                 Number v2)
    提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
    Parameters:
    v1 - 被除数
    v2 - 除数
    Returns:
    两个参数的商
    Since:
    3.1.0
    public static BigDecimal div(String v1,
                                 String v2)
    提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入
    Parameters:
    v1 - 被除数
    v2 - 除数
    Returns:
    两个参数的商
    public static int ceilDiv(int v1,
                              int v2)
    补充Math.ceilDiv() JDK8中添加了和Math.floorDiv()但却没有ceilDiv()
    Parameters:
    v1 - 被除数
    v2 - 除数
    Returns:
    两个参数的商
    Since:
    5.3.3
    public static BigDecimal round(String numberStr,
                                   int scale,
                                   RoundingMode roundingMode)
    保留固定位数小数
    例如保留四位小数:123.456789 =》 123.4567
    Parameters:
    numberStr - 数字值的字符串表现形式
    scale - 保留小数位数,如果传入小于0,则默认0
    roundingMode - 保留小数的模式 RoundingMode ,如果传入null则默认四舍五入
    Returns:
    public static BigDecimal round(BigDecimal number,
                                   int scale,
                                   RoundingMode roundingMode)
    保留固定位数小数
    例如保留四位小数:123.456789 =》 123.4567
    Parameters:
    number - 数字值
    scale - 保留小数位数,如果传入小于0,则默认0
    roundingMode - 保留小数的模式 RoundingMode ,如果传入null则默认四舍五入
    Returns:
    Parameters:
    pattern - 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
  • 0 =》 取一位整数
  • 0.00 =》 取一位整数和两位小数
  • 00.000 =》 取两位整数和三位小数
  • # =》 取所有整数部分
  • #.##% =》 以百分比方式计数,并取两位小数
  • #.#####E0 =》 显示为科学计数法,并取五位小数
  • ,### =》 每三位以逗号进行分隔,例如:299,792,458
  • 光速大小为每秒,###米 =》 将格式嵌入文本
  • value - 值
    Returns:
    格式化后的值
    Parameters:
    pattern - 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
  • 0 =》 取一位整数
  • 0.00 =》 取一位整数和两位小数
  • 00.000 =》 取两位整数和三位小数
  • # =》 取所有整数部分
  • #.##% =》 以百分比方式计数,并取两位小数
  • #.#####E0 =》 显示为科学计数法,并取五位小数
  • ,### =》 每三位以逗号进行分隔,例如:299,792,458
  • 光速大小为每秒,###米 =》 将格式嵌入文本
  • value - 值
    Returns:
    格式化后的值
    Since:
    3.0.5
    Parameters:
    pattern - 格式 格式中主要以 # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,# 表示只要有可能就把数字拉上这个位置。
  • 0 =》 取一位整数
  • 0.00 =》 取一位整数和两位小数
  • 00.000 =》 取两位整数和三位小数
  • # =》 取所有整数部分
  • #.##% =》 以百分比方式计数,并取两位小数
  • #.#####E0 =》 显示为科学计数法,并取五位小数
  • ,### =》 每三位以逗号进行分隔,例如:299,792,458
  • 光速大小为每秒,###米 =》 将格式嵌入文本
  • value - 值,支持BigDecimal、BigInteger、Number等类型
    Returns:
    格式化后的值
    Since:
    5.1.6
    public static String decimalFormat(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:
    格式化后的值
    Since:
    5.6.5

    decimalFormatMoney

    public static String decimalFormatMoney(double value)
    格式化金额输出,每三位用逗号分隔
    Parameters:
    value - 金额
    Returns:
    格式化后的值
    Since:
    3.0.9
    public static boolean isPrimes(int n)
    是否是质数(素数)
    质数表的质数又称素数。指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
    Parameters:
    n - 数字
    Returns:
    是否是质数
    public static Collection<Integer> appendRange(int start,
                                                  int stop,
                                                  Collection<Integer> values)
    将给定范围内的整数添加到已有集合中,步进为1
    Parameters:
    start - 开始(包含)
    stop - 结束(包含)
    values - 集合
    Returns:
    public static boolean isGreater(BigDecimal bigNum1,
                                    BigDecimal bigNum2)
    比较大小,参数1 > 参数2 返回true
    Parameters:
    bigNum1 - 数字1
    bigNum2 - 数字2
    Returns:
    Since:
    3.0.9

    isGreaterOrEqual

    public static boolean isGreaterOrEqual(BigDecimal bigNum1,
                                           BigDecimal bigNum2)
    比较大小,参数1 >= 参数2 返回true
    Parameters:
    bigNum1 - 数字1
    bigNum2 - 数字2
    Returns:
    是否大于等于
    Since:
    3, 0.9
    public static boolean isLess(BigDecimal bigNum1,
                                 BigDecimal bigNum2)
    比较大小,参数1 < 参数2 返回true
    Parameters:
    bigNum1 - 数字1
    bigNum2 - 数字2
    Returns:
    Since:
    3, 0.9

    isLessOrEqual

    public static boolean isLessOrEqual(BigDecimal bigNum1,
                                        BigDecimal bigNum2)
    比较大小,参数1<=参数2 返回true
    Parameters:
    bigNum1 - 数字1
    bigNum2 - 数字2
    Returns:
    是否小于等于
    Since:
    3, 0.9
    public static boolean isIn(BigDecimal value,
                               BigDecimal minInclude,
                               BigDecimal maxInclude)
    检查值是否在指定范围内
    Parameters:
    value - 值
    minInclude - 最小值(包含)
    maxInclude - 最大值(包含)
    Returns:
    经过检查后的值
    Since:
    5.8.5
    比较大小,值相等 返回true
    此方法通过调用 Double.doubleToLongBits(double) 方法来判断是否相等
    此方法判断值相等时忽略精度的,即0.00 == 0
    Parameters:
    num1 - 数字1
    num2 - 数字2
    Returns:
    Since:
    5.4.2
    比较数字值是否相等,相等返回 true
    需要注意的是 BigDecimal 需要特殊处理
    BigDecimal使用compareTo方式判断,因为使用equals方法也判断小数位数,如2.0和2.00就不相等,
    此方法判断值相等时忽略精度的,即0.00 == 0
  • 如果用户提供两个Number都是 BigDecimal ,则通过调用 BigDecimal.compareTo(BigDecimal) 方法来判断是否相等
  • 其他情况调用 Object.equals(Object) 比较
  • Parameters:
    number1 - 数字1
    number2 - 数字2
    Returns:
    Since:
    5.8.17
    See Also:
    Objects.equals(Object, Object)
    比较大小,值相等 返回true
    此方法通过调用 BigDecimal.compareTo(BigDecimal) 方法来判断是否相等
    此方法判断值相等时忽略精度的,即0.00 == 0
    Parameters:
    bigNum1 - 数字1
    bigNum2 - 数字2
    Returns:
    public static String toStr(Number number)
    数字转字符串
    调用 Object.toString() BigDecimal.toPlainString() ,并去除尾小数点儿后多余的0
    Parameters:
    number - A Number
    Returns:
    A String.
    boolean isStripTrailingZeros)
    数字转字符串
    调用 Object.toString() BigDecimal.toPlainString() ,并去除尾小数点儿后多余的0
    Parameters:
    number - A Number
    isStripTrailingZeros - 是否去除末尾多余0,例如5.0返回5
    Returns:
    A String.
    public static String toStr(BigDecimal bigDecimal)
    BigDecimal 数字转字符串
    调用 BigDecimal.toPlainString() ,并去除尾小数点儿后多余的0
    Parameters:
    bigDecimal - A BigDecimal
    Returns:
    A String.
    Since:
    5.4.6
    public static String toStr(BigDecimal bigDecimal,
                               boolean isStripTrailingZeros)
    BigDecimal 数字转字符串
    调用 BigDecimal.toPlainString() ,可选去除尾小数点儿后多余的0
    Parameters:
    bigDecimal - A BigDecimal
    isStripTrailingZeros - 是否去除末尾多余0,例如5.0返回5
    Returns:
    A String.
    Since:
    5.4.6
    public static BigDecimal toBigDecimal(Number number)
    数字转 BigDecimal
    Float、Double等有精度问题,转换为字符串后再转换
    null转换为0
    Parameters:
    number - 数字
    Returns:
    BigDecimal
    Since:
    4.0.9
    @Deprecated
    public static BigDecimal null2Zero(BigDecimal decimal)
    Deprecated. 请使用 nullToZero(BigDecimal)
    Parameters:
    decimal - BigDecimal ,可以为 null
    Returns:
    BigDecimal 参数为空时返回0的值
    Since:
    3.0.9

    nullToZero

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

    nullToZero

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

    newBigInteger

    public static BigInteger newBigInteger(String str)
    创建 BigInteger ,支持16进制、10进制和8进制,如果传入空白串返回null
    from Apache Common Lang
    Parameters:
    str - 数字字符串
    Returns:
    BigInteger
    Since:
    3.2.1
    boolean isPlusOneWhenHasRem)
    把给定的总数平均分成N份,返回每份的个数
    如果isPlusOneWhenHasRem为true,则当除以分数有余数时每份+1,否则丢弃余数部分
    Parameters:
    total - 总数
    partCount - 份数
    isPlusOneWhenHasRem - 在有余数时是否每份+1
    Returns:
    每份的个数
    Since:
    4.0.7
    public static int parseInt(String number)
                        throws NumberFormatException
    解析转换数字字符串为int型数字,规则如下: 1、0x开头的视为16进制数字 2、0开头的忽略开头的0 3、其它情况按照10进制转换 4、空串返回0 5、.123形式返回0(按照小于0的小数对待) 6、123.56截取小数点之前的数字,忽略小数部分
    Parameters:
    number - 数字,支持0x开头、0开头和普通十进制
    Returns:
    Throws:
    NumberFormatException - 数字格式异常
    Since:
    4.1.4

    parseNumber

    public static Number parseNumber(String numberStr)
                              throws NumberFormatException
    将指定字符串转换为 Number 对象
    此方法不支持科学计数法 需要注意的是,在不同Locale下,数字的表示形式也是不同的,例如:
    德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区使用`,`区分小数
    也就是说,在这些国家地区,1.20表示120,而非1.2。
    Parameters:
    numberStr - Number字符串
    Returns:
    Number对象
    Throws:
    NumberFormatException - 包装了 ParseException ,当给定的数字字符串无法解析时抛出
    Since:
    4.1.15
    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
    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:
    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
    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
    public static Number parseNumber(String numberStr,
                                     Number defaultValue)
    将指定字符串转换为 Number 此方法不支持科学计数法
    Parameters:
    numberStr - Number字符串
    defaultValue - 如果解析失败, 将返回defaultValue, 允许null
    Returns:
    Number对象
    public static byte[] toBytes(int value)
    int值转byte数组,使用大端字节序(高位字节在前,低位字节在后)
    见: http://www.ruanyifeng.com/blog/2016/11/byte-order.html
    Parameters:
    value - 值
    Returns:
    byte数组
    Since:
    4.4.5
    public static int toInt(byte[] bytes)
    byte数组转int,使用大端字节序(高位字节在前,低位字节在后)
    见: http://www.ruanyifeng.com/blog/2016/11/byte-order.html
    Parameters:
    bytes - byte数组
    Returns:
    Since:
    4.4.5

    toUnsignedByteArray

    public static byte[] toUnsignedByteArray(BigInteger value)
    以无符号字节数组的形式返回传入值。
    Parameters:
    value - 需要转换的值
    Returns:
    无符号bytes
    Since:
    4.5.0

    toUnsignedByteArray

    public static byte[] toUnsignedByteArray(int length,
                                             BigInteger value)
    以无符号字节数组的形式返回传入值。
    Parameters:
    length - bytes长度
    value - 需要转换的值
    Returns:
    无符号bytes
    Since:
    4.5.0

    fromUnsignedByteArray

    public static BigInteger fromUnsignedByteArray(byte[] buf)
    无符号bytes转 BigInteger
    Parameters:
    buf - buf 无符号bytes
    Returns:
    BigInteger
    Since:
    4.5.0

    fromUnsignedByteArray

    public static BigInteger fromUnsignedByteArray(byte[] buf,
                                                   int off,
                                                   int length)
    无符号bytes转 BigInteger
    Parameters:
    buf - 无符号bytes
    off - 起始位置
    length - 长度
    Returns:
    BigInteger
    public static boolean isValidNumber(Number number)
    检查是否为有效的数字
    检查Double和Float是否为无限大,或者Not a Number
    非数字类型和Null将返回false
    Parameters:
    number - 被检查类型
    Returns:
    检查结果,非数字类型和Null将返回false
    Since:
    4.6.7