All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.core.lang.NumberUtil Maven / Gradle / Ivy

package com.moon.core.lang;

import com.moon.core.lang.support.NumberSupport;

import java.math.BigDecimal;
import java.util.Objects;

import static com.moon.core.lang.ThrowUtil.noInstanceError;

/**
 * @author moonsky
 */
public class NumberUtil {

    protected NumberUtil() { noInstanceError(); }

    /**
     * 是否是广义数字类
     *
     * @param type 待测类
     *
     * @return true | false
     */
    public final static boolean isGeneralNumberClass(Class type) {
        return isWrapperNumberClass(type) || isPrimitiveNumberClass(type) || Number.class.isAssignableFrom(type);
    }

    /**
     * 是否是数字基本数据类型类
     *
     * @param type 待测类
     *
     * @return 当 type 是 byte、short、int、long、float、double 其中之一时返回 true,否则返回 false
     */
    public final static boolean isPrimitiveNumberClass(Class type) {
        return NumberSupport.isNumberPrimitiveClass(type);
    }

    /**
     * 是否是数字基本包装类型类
     *
     * @param type 待测类
     *
     * @return 当 type 是 Byte、Short、Integer、Long、Float、Double 其中之一时返回 true,否则返回 false
     */
    public final static boolean isWrapperNumberClass(Class type) {
        return NumberSupport.isNumberWrapperClass(type);
    }

    /**
     * 用{@link Comparable#compareTo(Object)}比较两个数字大小;
     * 

* {@link BigDecimal}在比较时,{@code equals}会比较精度,{@code compareTo}不会比较精度 * 【阿里巴巴Java开发手册(嵩山版)】 * * @param num1 数字 * @param num2 数字 * * @return 如果两个数字相等,返回 true */ public final static boolean compareEquals(Number num1, Number num2) { try { Comparable value1 = (Comparable) num1; return (value1 != null && value1.compareTo(num2) == 0) || Objects.equals(num2, num1); } catch (ClassCastException e) { // http://www.cocoachina.com/articles/52532 return Objects.equals(num2, num1); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy