Globalize.parseFloat = function()

in globalize/globalize.ts [1464:1551]


Globalize.parseFloat = function (value, radix, cultureSelector) {
    // radix argument is optional
    if (typeof radix !== "number") {
        cultureSelector = radix;
        radix = 10;
    }

    var culture = this.findClosestCulture(cultureSelector);
    var ret = NaN,
        nf = culture.numberFormat;

    if (value.indexOf(culture.numberFormat.currency.symbol) > -1) {
        // remove currency symbol
        value = value.replace(culture.numberFormat.currency.symbol, "");
        // replace decimal seperator
        value = value.replace(culture.numberFormat.currency["."], culture.numberFormat["."]);
    }

    // trim leading and trailing whitespace
    value = trim(value);

    // allow infinity or hexidecimal
    if (regexInfinity.test(value)) {
        ret = parseFloat(value);
    }
    else if (!radix && regexHex.test(value)) {
        ret = parseInt(value, 16);
    }
    else {
        var signInfo = parseNegativePattern(value, nf, nf.pattern[0]),
            sign = signInfo[0],
            num = signInfo[1];
        // determine sign and number
        if (sign === "" && nf.pattern[0] !== "-n") {
            signInfo = parseNegativePattern(value, nf, "-n");
            sign = signInfo[0];
            num = signInfo[1];
        }
        sign = sign || "+";
        // determine exponent and number
        var exponent,
            intAndFraction,
            exponentPos = num.indexOf("e");
        if (exponentPos < 0) exponentPos = num.indexOf("E");
        if (exponentPos < 0) {
            intAndFraction = num;
            exponent = null;
        }
        else {
            intAndFraction = num.substr(0, exponentPos);
            exponent = num.substr(exponentPos + 1);
        }
        // determine decimal position
        var integer,
            fraction,
            decSep = nf["."],
            decimalPos = intAndFraction.indexOf(decSep);
        if (decimalPos < 0) {
            integer = intAndFraction;
            fraction = null;
        }
        else {
            integer = intAndFraction.substr(0, decimalPos);
            fraction = intAndFraction.substr(decimalPos + decSep.length);
        }
        // handle groups (e.g. 1,000,000)
        var groupSep = nf[","];
        integer = integer.split(groupSep).join("");
        var altGroupSep = groupSep.replace(/\u00A0/g, " ");
        if (groupSep !== altGroupSep) {
            integer = integer.split(altGroupSep).join("");
        }
        // build a natively parsable number string
        var p = sign + integer;
        if (fraction !== null) {
            p += "." + fraction;
        }
        if (exponent !== null) {
            // exponent itself may have a number patternd
            var expSignInfo = parseNegativePattern(exponent, nf, "-n");
            p += "e" + (expSignInfo[0] || "+") + expSignInfo[1];
        }
        if (regexParseFloat.test(p)) {
            ret = parseFloat(p);
        }
    }
    return ret;
};