CCCPaste

parseFormattedNumber

/** Extracts the first number formatted by ns.format.number() in a string.
 * @param {string} s String containing a formatted number
 * @returns {number} number */
function parseFormattedNumber(s) {
	if (typeof s !== "string") {ns.print("WARN: parseFormattedNumber: invalid type for input " + s); return NaN;}
	const [  // Ex.: "Gained $250.000m"
		num,   // "250.000m"
		base,  // "250.000"
		suffix // "m"
	] = s.match(/(-?\d+(?:[\.,]\d{1,5})?)(e\d+|[kmbtqQsSon])?/);

	if (!num || !base) {ns.print("WARN: parseFormattedNumber: no valid number found for input " + s); return NaN;}
	
	const numSuffixList = ["", "k", "m", "b", "t", "q", "Q", "s", "S", "o", "n"];
	let exp = suffix ?? "";
	if (suffix && numSuffixList.includes(suffix)) {
		exp = "e" + (numSuffixList.indexOf(suffix) * 3);
	}
	return parseFloat(base.replace(",",".") + exp);
}