功能说明
报表经常需要展示相对变化,但直接除以原值在基数为零时会得到 Infinity。该工具先计算相对变化百分比,再用固定小数位和正号格式化。格式化结果不依赖本地化设置,便于日志、接口和快照测试使用。
关键代码
percentChange 校验两个有限数字并拒绝 previous 为 0,使用绝对值作为分母以保持方向语义。formatPercentChange 限制小数位在 0 到 6,先 toFixed 再转回数字以消除负零,最后拼接正号和百分号。
const rounded = Number(value.toFixed(digits));
const sign = rounded > 0 ? "+" : "";
return sign + rounded.toFixed(digits) + "%";
使用注意
previous 为 0 时没有定义相对变化,函数会抛 RangeError,调用方应先判断基数或改为显示绝对值。结果四舍五入到指定小数位,不适用于需要精确金额的场景。正负号仅表示方向,不包含千分位分隔。极大数可能因浮点精度失去低位。
验证方式
断言 percentChange(200, 250) 等于 25,formatPercentChange(25) 返回 +25.0%。percentChange(100, 50) 返回 -50,格式化后为 -50.0%。previous 为 0 抛 RangeError,digits 为 -1 或 7 抛 RangeError,value 为 NaN 抛 TypeError。