public static long parseLong(char[] chars, int off, int len) {
        int max = off + len;
        int fc = chars[off++];
        long result = IOUtils.isDigit(fc)
                ? '0' - fc
                : len != 1 && (fc == '-' || fc == '+')
                ? 0
                : 1;  // or any value > 0
        int d;
        while (off + 1 < max
                && (d = IOUtils.digit2(chars, off)) != -1
                && Long.MIN_VALUE / 100 <= result & result <= 0) {
            result = result * 100 - d;  // overflow from d => result > 0
            off += 2;
        }
        if (off < max
                && IOUtils.isDigit(d = chars[off])
                && Long.MIN_VALUE / 10 <= result & result <= 0) {
            result = result * 10 + '0' - d;  // overflow from '0' - d => result > 0
            off += 1;
        }
        if (off == max
                & result <= 0
                & (Long.MIN_VALUE < result || fc == '-')) {
            return fc == '-' ? result : -result;
        }
        throw new NumberFormatException("parseInt error " + new String(chars, off, len));
    }
decimal is integer, check has non-zero small

@param decimal
@return
core/src/main/java/com/alibaba/fastjson2/util/TypeUtils.java