如何实现数字格式化:小数点后3个零后的连续零用下标计数显示
自定义小数格式化实现方案
实现逻辑
处理逻辑完全匹配需求规则,步骤如下:
- 先把输入数字转成无科学计数法、无末尾无效零的字符串,避免浮点数精度、科学计数法干扰匹配
- 用正则匹配小数点后、首个非0数字前的连续0序列:
- 如果匹配不到(比如是整数、小数部分开头没有连续0),直接返回原数字字符串
- 如果连续0的数量小于3,不做处理,返回原格式
- 如果连续0数量≥3,把连续0的个数转成Unicode下标字符,按格式拼接为
0.0<下标个数><首个非0数字><剩余小数部分>
可直接运行的JS实现
function formatCustomNumber(num) { // 转定点数字符串,去掉末尾无效0 const numStr = num.toFixed(20).replace(/\.?0+$/, ''); // 捕获小数点后连续0、首个非0开头的剩余小数段 const matchGroup = numStr.match(/^0\.(0+)([1-9]\d*)$/); if (!matchGroup) return numStr; const zeroLength = matchGroup[1].length; const decimalRest = matchGroup[2]; if (zeroLength < 3) return numStr; // 数字转对应Unicode下标,支持两位及以上的零计数 const subscriptChars = ['₀','₁','₂','₃','₄','₅','₆','₇','₈','₉']; const countSubscript = String(zeroLength) .split('') .map(n => subscriptChars[Number(n)]) .join(''); return `0.0${countSubscript}${decimalRest[0]}${decimalRest.slice(1)}`; }
测试用例结果
调用方法对应输出完全符合示例要求:
formatCustomNumber(0.000001) → 0.0₅1 formatCustomNumber(0.0000003) → 0.0₆3 formatCustomNumber(0.001) → 0.001 formatCustomNumber(0.00001234) → 0.0₄1234
适配提示
- 如果用其他语言实现,逻辑完全通用,只需要替换对应语言的正则、数字转字符串、下标字符映射逻辑即可
- 整数部分非0的数字(比如123.0004)默认不会触发这套格式化规则,如果需要支持这类数字的小数部分处理,调整正则匹配范围即可
- Unicode下标字符兼容所有主流展示环境,不需要额外加HTML标签或者样式就能正常显示
内容的提问来源于stack exchange,提问作者foxrts
相关产品推荐
相关产品推荐

