public static double parseDecimalDouble()

in lang/src/main/java/com/epam/deltix/util/lang/StringUtils.java [619:707]


    public static double          parseDecimalDouble (byte [] bytes, int offset, int len) {
        skipSpace: while (len > 0)
            switch (bytes [offset]) {
                case ' ':
                case '\t':
                    len--;
                    offset++;
                    break;

                default:
                    break skipSpace;
            }

        skipSpace: while (len > 0)
            switch (bytes [offset + len - 1]) {
                case ' ':
                case '\t':
                    len--;
                    break;

                default:
                    break skipSpace;
            }

        int     s;

        switch (bytes [offset]) {
            case '+':
                offset++;
                len--;
                s = 1;
                break;

            case '-':
                offset++;
                len--;
                s = -1;
                break;

            default:
                s = 1;
                break;
        }

        double      v = 0;
        boolean     frac = false;
        double      m = 0.1;

        while (len > 0) {
            byte    b = bytes [offset];

            len--;
            offset++;

            if (b == '.') {
                frac = true;
                break;
            }

            int     digit = b - '0';

            if (digit < 0 || digit > 9)
                throw new NumberFormatException (
                    "bytes [" + offset + "] = " + b
                );

            v = v * 10 + digit;
        }

        if (frac)
            while (len > 0) {
                byte    b = bytes [offset];

                len--;
                offset++;

                int     digit = b - '0';

                if (digit < 0 || digit > 9)
                    throw new NumberFormatException (
                        "bytes [" + offset + "] = " + b
                    );

                v = v + digit * m;
                m *= 0.1;
            }

        return (s * v);
    }