NEWS
History Daten lesen und Durchschnitt bilden
-
Hallo,
ich steh' irgendwie auf dem Schlauch, was ist hier falsch
"avg" wird immer als NaN ausgegeben
(Zeile 18 und 30)var maxW = 0 var minW = 10000.0 var maxi,mini var avg =0.0; sendTo('history.0', 'getHistory', { id: 'javascript.0.VSM.LCur', options: { start: Date.now()-24*3600*1000, end: Date.now(), //count: 50, //aggregate: 'min', addId: true } }, function (result) { avg=1.0; for (var i = 0; i < result.result.length; i++) { avg = avg + parseFloat(result.result[i].val); if ( parseFloat(result.result[i].val) > maxW ) { maxW = result.result[i].val maxi=new Date(result.result[i].ts).toISOString() } if ( parseFloat(result.result[i].val) < minW ) { minW = result.result[i].val mini=new Date(result.result[i].ts).toISOString() } //console.log(result.result[i].val + ' '+ new Date(result.result[i].ts).toISOString()); } console.log(maxi+'#'+maxW+' '+mini+'#'+minW) console.log("AVG:"+avg) }); -
Hallo,
ich steh' irgendwie auf dem Schlauch, was ist hier falsch
"avg" wird immer als NaN ausgegeben
(Zeile 18 und 30)var maxW = 0 var minW = 10000.0 var maxi,mini var avg =0.0; sendTo('history.0', 'getHistory', { id: 'javascript.0.VSM.LCur', options: { start: Date.now()-24*3600*1000, end: Date.now(), //count: 50, //aggregate: 'min', addId: true } }, function (result) { avg=1.0; for (var i = 0; i < result.result.length; i++) { avg = avg + parseFloat(result.result[i].val); if ( parseFloat(result.result[i].val) > maxW ) { maxW = result.result[i].val maxi=new Date(result.result[i].ts).toISOString() } if ( parseFloat(result.result[i].val) < minW ) { minW = result.result[i].val mini=new Date(result.result[i].ts).toISOString() } //console.log(result.result[i].val + ' '+ new Date(result.result[i].ts).toISOString()); } console.log(maxi+'#'+maxW+' '+mini+'#'+minW) console.log("AVG:"+avg) });@stoffel67 sagte: "avg" wird immer als NaN ausgegeben
avgenthält nicht den Durchschnitt, sondern die Summe.
Vielleicht sind Einträge mit dem Wertnullenthalten? Dann sollten diese ausgefiltert werden. Etwa so:}, function (result) { let sum = 0; let cnt = 0; let maxW = 0; let minW = 10000; for (let i = 0; i < result.result.length; i++) { let val = parseFloat(result.result[i].val); if(!isNaN(val)) { sum += val; cnt++; if(val > maxW) { maxW = val; maxi = result.result[i].ts; } if(val < minW) { minW = val; mini = result.result[i].ts; } //console.log(val + ' '+ new Date(result.result[i].ts).toISOString()); } } console.log(new Date(maxi).toISOString() + '#' + maxW + ' ' + new Date(mini).toISOString() +'#' + minW); console.log("AVG: " + sum / cnt); });EDIT: Prüfung in Zeile 8 geändert.
-
@stoffel67 sagte: "avg" wird immer als NaN ausgegeben
avgenthält nicht den Durchschnitt, sondern die Summe.
Vielleicht sind Einträge mit dem Wertnullenthalten? Dann sollten diese ausgefiltert werden. Etwa so:}, function (result) { let sum = 0; let cnt = 0; let maxW = 0; let minW = 10000; for (let i = 0; i < result.result.length; i++) { let val = parseFloat(result.result[i].val); if(!isNaN(val)) { sum += val; cnt++; if(val > maxW) { maxW = val; maxi = result.result[i].ts; } if(val < minW) { minW = val; mini = result.result[i].ts; } //console.log(val + ' '+ new Date(result.result[i].ts).toISOString()); } } console.log(new Date(maxi).toISOString() + '#' + maxW + ' ' + new Date(mini).toISOString() +'#' + minW); console.log("AVG: " + sum / cnt); });EDIT: Prüfung in Zeile 8 geändert.
@paul53 said in History Daten lesen und Durchschnitt bilden:
function (result) { let sum = 0; let cnt = 0; let maxW = 0; let minW = 10000; for (let i = 0; i < result.result.length; i++) { let val = parseFloat(result.result[i].val); if(val != NaN) { sum += val; cnt++; if(val > maxW) { maxW = val; maxi = result.result[i].ts; } if(val < minW) { minW = val; mini = result.result[i].ts; } //console.log(val + ' '+ new Date(result.result[i].ts).toISOString()); } } console.log(new Date(maxi).toISOString() + '#' + maxW + ' ' + new Date(mini).toISOString() +'#' + minW); console.log("AVG: " + sum / cnt); });
Leider gleiches Ergebnis, ( ja es ist richtig, es wird zuerst die Summe gebildet, aber das klappt ja nicht)
avg ist immer noch NaN -
@stoffel67 sagte: "avg" wird immer als NaN ausgegeben
avgenthält nicht den Durchschnitt, sondern die Summe.
Vielleicht sind Einträge mit dem Wertnullenthalten? Dann sollten diese ausgefiltert werden. Etwa so:}, function (result) { let sum = 0; let cnt = 0; let maxW = 0; let minW = 10000; for (let i = 0; i < result.result.length; i++) { let val = parseFloat(result.result[i].val); if(!isNaN(val)) { sum += val; cnt++; if(val > maxW) { maxW = val; maxi = result.result[i].ts; } if(val < minW) { minW = val; mini = result.result[i].ts; } //console.log(val + ' '+ new Date(result.result[i].ts).toISOString()); } } console.log(new Date(maxi).toISOString() + '#' + maxW + ' ' + new Date(mini).toISOString() +'#' + minW); console.log("AVG: " + sum / cnt); });EDIT: Prüfung in Zeile 8 geändert.
@paul53 sagte in History Daten lesen und Durchschnitt bilden:
sum += val;
nicht dass ich wüsste was ich tue, aber das sieht für mich komisch aus
-
@paul53 sagte in History Daten lesen und Durchschnitt bilden:
sum += val;
nicht dass ich wüsste was ich tue, aber das sieht für mich komisch aus
-
@paul53 said in History Daten lesen und Durchschnitt bilden:
function (result) { let sum = 0; let cnt = 0; let maxW = 0; let minW = 10000; for (let i = 0; i < result.result.length; i++) { let val = parseFloat(result.result[i].val); if(val != NaN) { sum += val; cnt++; if(val > maxW) { maxW = val; maxi = result.result[i].ts; } if(val < minW) { minW = val; mini = result.result[i].ts; } //console.log(val + ' '+ new Date(result.result[i].ts).toISOString()); } } console.log(new Date(maxi).toISOString() + '#' + maxW + ' ' + new Date(mini).toISOString() +'#' + minW); console.log("AVG: " + sum / cnt); });
Leider gleiches Ergebnis, ( ja es ist richtig, es wird zuerst die Summe gebildet, aber das klappt ja nicht)
avg ist immer noch NaN@stoffel67 sagte: avg ist immer noch NaN
Das sollte durch die Prüfung in Zeile 8 verhindert werden.
EDIT: Habe gerade getestet: Ein Vergleich mit NaN funktioniert nicht. Ändere die Prüfung:
if(!isNaN(val)) { -
@stoffel67 sagte: avg ist immer noch NaN
Das sollte durch die Prüfung in Zeile 8 verhindert werden.
EDIT: Habe gerade getestet: Ein Vergleich mit NaN funktioniert nicht. Ändere die Prüfung:
if(!isNaN(val)) {
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden