编写获取带小数的下一个数字的Function,解决小数后前置零运算异常问题
问题原因
现有代码的逻辑缺陷在于替换末尾数字段时,直接返回了数值运算结果,丢失了原始数字串的前导零长度:当匹配到002这类带前导零的字符串时,parseInt("002")会得到数值2,加1后得到3,直接替换会把原本3位长度的002替换为1位长度的3,最终3.002就会被错误转换为3.3。
修复方案
我们只需要在替换时保留原始数字串的长度,对加1后的结果补前导零到对应长度即可:
const getNextValue = (input) => { const newNumber = input .toString() .replace(/\d+$/, (number) => { const incrementedVal = parseInt(number) + 1 // 补前导零到原始数字串的长度 return incrementedVal.toString().padStart(number.length, '0') }) return parseFloat(newNumber) }
测试验证
console.log(getNextValue(3.3)) // 3.4 符合预期 console.log(getNextValue(3.34)) // 3.35 符合预期 console.log(getNextValue(3.002)) // 3.003 符合预期
注意事项
如果业务需要保留小数位末尾的零(比如希望3.099处理后得到3.100而不是3.1),可以去掉parseFloat转换,直接返回字符串类型的newNumber即可。
内容的提问来源于stack exchange,提问作者John Scipion
相关产品推荐
相关产品推荐

