如何对非零小数位执行toFixed(2)规则,保留2位非零有效小数
保留2位非零有效小数实现方案
实现逻辑
我们的目标是跳过小数部分的前导零,从第一个非零数位开始保留2位有效数字,遵循常规四舍五入规则,避免小数值被错误截断为0。
代码实现(JavaScript)
function formatTwoNonZeroDecimal(num) { // 处理0值特殊情况 if (num === 0) return 0 // 计算数值的数量级,定位第一个非零小数位的位置 const exponent = Math.ceil(-Math.log10(Math.abs(num))) // 计算放大系数,将第一个非零位移到整数位后第二位 const scale = Math.pow(10, exponent + 1) // 四舍五入后还原量级 return Math.round(num * scale) / scale }
如果需要返回字符串格式避免极小/极大值默认显示为科学计数法,可以补充转换逻辑:
function formatTwoNonZeroDecimalStr(num) { const numVal = formatTwoNonZeroDecimal(num) return numVal.toLocaleString('fullwide', { useGrouping: false, maximumSignificantDigits: 20 }) }
验证结果
和需求给出的示例比对,输出完全符合预期:
formatTwoNonZeroDecimal(1.2234)→ 1.22formatTwoNonZeroDecimal(0.2345)→ 0.23formatTwoNonZeroDecimal(0.02345)→ 0.023formatTwoNonZeroDecimal(0.0000002345)→ 0.00000023formatTwoNonZeroDecimal(0.0000002346545645645646465465)→ 0.00000023formatTwoNonZeroDecimal(0.002035)→ 0.002
内容的提问来源于stack exchange,提问作者François Richard
相关产品推荐
相关产品推荐

