Percent Change and Signed Percentage Formatting
Calculate relative change between two numbers and format the result with fixed decimals, an explicit plus sign and locale-free output.
Code
export function percentChange(previous, current) {
if (!Number.isFinite(previous) || !Number.isFinite(current)) {
throw new TypeError("previous and current must be finite numbers");
}
if (previous === 0) throw new RangeError("previous value must not be zero");
return ((current - previous) / Math.abs(previous)) * 100;
}
export function formatPercentChange(value, digits = 1) {
if (!Number.isFinite(value)) throw new TypeError("value must be a finite number");
if (!Number.isInteger(digits) || digits < 0 || digits > 6) {
throw new RangeError("digits must be an integer between 0 and 6");
}
const rounded = Number(value.toFixed(digits));
const sign = rounded > 0 ? "+" : "";
return sign + rounded.toFixed(digits) + "%";
}Report a problem with this exampleOpens a pre-filled issue on GitHub.