public static float floatValue(int signNum, long intCompact, int scale) {
        int bitLength = 64 - Long.numberOfLeadingZeros(intCompact);
        long qb = bitLength - (long) Math.ceil(scale * L);
        if (qb < Q_MIN_F - 2) {  // qb < -151
            return signNum * 0.0f;
        }
        if (qb > Q_MAX_F + P_F + 1) {  // qb > 129
            return signNum * Float.POSITIVE_INFINITY;
        }
        if (scale == 0) {
            return signNum * (float) intCompact;
        }

        int ql = (int) qb - (P_F + 3);  // narrowing qb to an int is safe
        int i = (int) MutableBigInteger.divideKnuthLong(intCompact, ql, scale);

        int sb = intCompact == 0 ? 0 : 1;
        int dq = (Integer.SIZE - (P_F + 2)) - Integer.numberOfLeadingZeros(i);
        int eq = (Q_MIN_F - 2) - ql;
        if (dq >= eq) {
            return signNum * Math.scalb((float) (i | sb), ql);
        }
        int mask = (1 << eq) - 1;
        int j = i >> eq | (Integer.signum(i & mask)) | sb;
        return signNum * Math.scalb((float) j, Q_MIN_F - 2);
    }
decimal is integer, check has non-zero small

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