public static boolean isNumber(byte[] str, int off, int len) {
        if (str == null || len == 0) {
            return false;
        }

        char ch = (char) str[off];
        int offset;
        boolean sign = ch == '-' || ch == '+';
        if (sign) {
            if (len == 1) {
                return false;
            }
            ch = (char) str[off + 1];
            offset = off + 1;
        } else {
            if (ch == '.') {
                if (len == 1) {
                    return false;
                }

                offset = off + 1;
            } else {
                offset = off;
            }
        }

        int end = off + len;
        boolean dot = ch == '.';
        boolean num = false;
        if (!dot && (ch >= '0' && ch <= '9')) {
            num = true;
            do {
                if (offset < end) {
                    ch = (char) str[offset++];
                } else {
                    return true;
                }
            } while (ch >= '0' && ch <= '9');
        }

        boolean small = false;
        if (ch == '.') {
            small = true;
            if (offset < end) {
                ch = (char) str[offset++];
            } else {
                return true;
            }

            if (ch >= '0' && ch <= '9') {
                do {
                    if (offset < end) {
                        ch = (char) str[offset++];
                    } else {
                        return true;
                    }
                } while (ch >= '0' && ch <= '9');
            }
        }

        if (!num && !small) {
            return false;
        }

        if (ch == 'e' || ch == 'E') {
            if (offset == end) {
                return true;
            }

            ch = (char) str[offset++];

            boolean eSign = false;
            if (ch == '+' || ch == '-') {
                eSign = true;
                if (offset < end) {
                    ch = (char) str[offset++];
                } else {
                    return false;
                }
            }

            if (ch >= '0' && ch <= '9') {
                do {
                    if (offset < end) {
                        ch = (char) str[offset++];
                    } else {
                        return true;
                    }
                } while (ch >= '0' && ch <= '9');
            } else if (eSign) {
                return false;
            }
        }

        return false;
    }
decimal is integer, check has non-zero small

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