如何在JS统计代码中使用toFixed(2)将百分比保留两位小数显示
问题原因
你之前的写法报错有两个核心诱因:
- JS 解析数字字面量的优先级问题:
100.toFixed(2)会被引擎优先把.识别为小数分隔符,而非方法调用符,直接触发语法错误。正确的数字调用方法写法应为(100).toFixed(2)或100..toFixed(2)。 toFixed()方法返回值为字符串类型,如果在累加阶段调用,会触发字符串拼接逻辑,完全不符合数值计算需求。
最优解决方案
建议遵循「计算和展示分离」的原则,先完成所有数值累加,最后统一格式化结果,避免计算过程中出现精度丢失或类型错误,修改后代码如下:
const totalUsers = 12 const movies = data.filter(v => v.genre?.selected == "Movie"); // 1. 先正常累加计算百分比数值,不做格式转换 const counts = movies.reduce((acc, cur) => { return !cur["1"]?.drama ? acc: Object.entries(cur["1"].drama).reduce((acc, [key,value]) => { if (value) { acc[key] = (acc[key] || 0) + (1 / totalUsers) * 100; } return acc; }, acc) }, {}) // 2. 统一格式化结果为保留两位小数的百分比格式 const formattedCounts = Object.fromEntries( Object.entries(counts).map(([key, value]) => [key, `${value.toFixed(2)}%`]) )
最终formattedCounts中存储的就是你需要的8.33%格式的结果。
内容的提问来源于stack exchange,提问作者JS3
相关产品推荐
相关产品推荐

