private static Long parseNumberString(String str, final Divider[] dividers) throws NumberFormatException {
        if (str == null) {
            return null;
        }
        // Cat fix this findbug as code used in UI
        str = str.trim().toUpperCase();
        // Kill Quotes
        if (str.startsWith("'") || str.startsWith("\"")) {
            str = str.substring(1);
        }
        if (str.endsWith("'") || str.endsWith("\"")) {
            str = str.substring(0, str.length() - 1);
        }

        final StringBuilder numPart = new StringBuilder();
        final StringBuilder suffixPart = new StringBuilder();
        boolean inNum = true;

        for (int i = 0; i < str.length(); i++) {
            final char c = str.charAt(i);
            if (inNum) {
                if (Character.isDigit(c) || c == '.') {
                    numPart.append(c);
                } else {
                    inNum = false;
                }
            }
            if (!inNum) {
                suffixPart.append(c);
            }
        }

        if (numPart.length() == 0) {
            return null;
        }
        final double d = Double.parseDouble(numPart.toString());

        final String suffix = suffixPart.toString().trim();

        long multiplier = 1;

        for (final Divider divider : dividers) {
            multiplier *= divider.div;
            for (final String unit : divider.unit) {
                if (unit.equalsIgnoreCase(suffix)) {
                    return (long) (multiplier * d);
                }
            }
        }

        throw new NumberFormatException("Unable to parse " + str + " as suffix " + suffix + " not recognised");

    }
@return The display value of {@code hasDisplayValue}
stroom-util-shared/src/main/java/stroom/util/shared/ModelStringUtil.java