fix(currentSteamCurve): 修复用能流速曲线平均值计算问题

- 在计算平均值时增加了对无效值(NaN)的过滤
- 确保只有有效的数值参与平均值计算,提高数据准确性
-目前的计算逻辑是:
 通过 processedData.filter(item => !item.isBreakPoint) 过滤掉标记为“停电”期间插入的断点 (isBreakPoint: true)。
 使用 validData.map(e => parseFloat(e[valueField])) 将需要计算的字段值转换为浮点数。
 使用 reduce 计算总和并除以数量得到平均值。
 问题可能出在第二步或第三步:
 parseFloat(e[valueField]) 的结果: 如果 e[valueField] 的原始值是 null, undefined, 空字符串 "" 或其他非数字格式,parseFloat 会返回 NaN (Not a Number)。
 reduce((a, b) => a + b, 0) 的行为: 当数组中包含 NaN 时,reduce 的累加结果也会变成 NaN。
 后续计算: NaN / validValues.length 的结果是 NaN。最后对 NaN 调用 .toFixed(2) 的结果在不同 JavaScript 环境下可能不一致,但通常是字符串 "NaN",而不是负数。
 然而,既然显示了负数,可能存在更隐藏的问题,或者是在 reduce 过程中,某些非数字值(如 null)被隐式转换为了 0,但某些其他值导致了异常。最稳妥的方法是在计算平均值之前,显式地过滤掉所有非数字(NaN)的值。
 我将修改 processDataBreaks 函数,在计算平均值之前增加一步,过滤掉 map 操作后可能产生的 NaN 值。
master
zch 1 month ago
parent dc79271196
commit 6b0ca7a207

@ -565,11 +565,13 @@ export default {
const timeData = processedData.map(e => e.recordTime) const timeData = processedData.map(e => e.recordTime)
const valueData = processedData.map(e => e[valueField]) const valueData = processedData.map(e => e[valueField])
// //
const validData = processedData.filter(item => !item.isBreakPoint) const validData = processedData.filter(item => !item.isBreakPoint)
const validValues = validData.map(e => parseFloat(e[valueField])) const validValues = validData.map(e => parseFloat(e[valueField]))
const average = validValues.length > 0 ? // NaN
(validValues.reduce((a, b) => a + b, 0) / validValues.length).toFixed(2) : 0 const validNumericValues = validValues.filter(v => !isNaN(v));
const average = validNumericValues.length > 0 ?
(validNumericValues.reduce((a, b) => a + b, 0) / validNumericValues.length).toFixed(2) : 0
return { return {
processedData, processedData,

Loading…
Cancel
Save