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.

JavascriptData Integrity

Code

snippet
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) + "%";
}