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;
};