You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化正负数字比较逻辑,避免重复判断以简化toFixed处理?

重构方案

核心思路是利用绝对值统一处理正负数字的范围判断,避免重复编写正负两侧的条件,同时可通过配置化规则让代码更简洁、易维护。

方案一:简化条件判断(基础版)

先取数字的绝对值,仅针对绝对值做范围判断,确定小数位数后直接对原数字调用toFixed(该方法会自动保留符号):

const absValue = Math.abs(numberValue);
let fixedDigits;

if (absValue > 100 && absValue < 999) {
  fixedDigits = 0;
} else if (absValue > 10 && absValue < 99) {
  fixedDigits = 1;
} else if (absValue > 1 && absValue < 9) {
  fixedDigits = 2;
} else if (absValue > 0 && absValue < 1) {
  fixedDigits = 3;
} else if (absValue >= 1000) {
  fixedDigits = 4;
}
// 注意:原代码未覆盖边界值(如100、10、1、0、-1000等),需根据业务需求补充处理逻辑
scalarNotation = numberValue.toFixed(fixedDigits);

方案二:配置化规则列表(推荐,易扩展)

把范围判断规则和对应小数位数封装成数组,循环匹配对应规则,后续修改或新增规则只需调整数组,无需改动判断逻辑:

// 定义格式化规则,顺序需与原判断逻辑一致
const formatRules = [
  { match: (absVal) => absVal > 100 && absVal < 999, digits: 0 },
  { match: (absVal) => absVal > 10 && absVal < 99, digits: 1 },
  { match: (absVal) => absVal > 1 && absVal < 9, digits: 2 },
  { match: (absVal) => absVal > 0 && absVal < 1, digits: 3 },
  { match: (absVal) => absVal >= 1000, digits: 4 },
];

const absValue = Math.abs(numberValue);
// 找到匹配的规则
const matchedRule = formatRules.find(rule => rule.match(absValue));
// 处理未匹配的边界值,这里默认设为0位,可根据需求调整
const fixedDigits = matchedRule ? matchedRule.digits : 0;
scalarNotation = numberValue.toFixed(fixedDigits);

补充说明

原代码未覆盖numberValue等于边界值(如100、-100、10、-10、1、-1、0、1000、-1000)的场景,需根据实际业务需求调整规则中的判断条件(例如把>改为>=,或新增规则处理边界值)。

内容的提问来源于stack exchange,提问作者ksusha-beep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:05:33