如何实现仅对可转换数值调用toFixed(8),否则原样输出?
解决toFixed调用时的类型报错问题
我懂你现在的困扰——循环处理数据时,碰到带文本的字符串就因为调用toFixed(8)直接报错,导致后面的代码都没法继续执行。要实现「能格式化就用toFixed(8)输出,不能就原样返回变量」的逻辑,其实很简单,给你几个实用的解决思路:
方案1:先判断是否为数字类型
最稳妥的方式是先确认目标值是number类型,再调用toFixed,否则直接返回原值:
$.each(trades, function(_, obj) { if (obj['sold'] == true) { if (obj['enddate'] === undefined) { count = 1; let profit = obj['profit_percentage']; // 核心安全处理逻辑 let formattedProfit = typeof profit === 'number' ? profit.toFixed(8) : profit; tradeList.add({ startdate: obj['datetime'], // 这里替换成处理后的formattedProfit profit: formattedProfit, // 其他需要处理的字段也可以用同样逻辑 }); } } });
方案2:兼容Number对象的检查(更灵活)
如果你的场景里偶尔会出现Number包装对象(虽然日常开发里很少见),可以直接检查值是否拥有合法的toFixed方法:
let formattedProfit = (typeof profit === 'number' && typeof profit.toFixed === 'function') ? profit.toFixed(8) : profit;
额外优化:处理数字格式的字符串
如果有些值是看起来像数字的字符串(比如"123.456789"),你可以先尝试把它转成数字,能转成功就格式化,否则原样返回:
let numProfit = Number(profit); let formattedProfit = !isNaN(numProfit) ? numProfit.toFixed(8) : profit;
这样既覆盖了纯数字的情况,也能把合法的数字字符串转成数字后格式化,只有完全无法识别为数字的文本才原样输出。
内容的提问来源于stack exchange,提问作者p0nts
相关产品推荐
相关产品推荐

