function round_data(data, n) { // 小数点以下n桁で四捨五入 var result = parseFloat(data); result = Math.round(result * Math.pow(10, n)) / Math.pow(10, n); result = '' + result; if (n == 0) { return result; } if (result.indexOf('.') == -1) { result += '.'; for (var j = 0; j < n; j++) { result += '0'; } } else { var sp = result.split('.'); if (sp[1].length < n) { for (var j = n; j > sp[1].length; j--) sp[1] += '0'; } result = sp[0] + '.' + sp[1]; } return result; } function cal_ao(data, depth, num) { // 水深depthでの溶存酸素量を計算 const A1 = -173.4292; const A2 = 249.6339; const A3 = 143.3483; const A4 = -21.8492; const B1 = -0.033096; const B2 = 0.014259; const B3 = -0.0017; const S = 34; const err = 'Err'; if (suishitsu_list[num] == '下灘' || suishitsu_list[num] == '下波' || suishitsu_list[num] == '家串') return 'NA'; switch (depth) { case '10m': if (!sensor_list[suishitsu_list[num]][11]) return 'NA'; if (data[11] == 'Err') return err; //var T = (parseFloat(data[6]) + parseFloat(data[10])) / 2; var T = merge_data(data[6], data[10]); var DO = parseFloat(data[11]); break; case '20m': if (!sensor_list[suishitsu_list[num]][13] || !sensor_list[suishitsu_list[num]][14]) return 'NA'; if (data[14] == 'Err') return err; var T = parseFloat(data[13]); var DO = parseFloat(data[14]); break; } const TS = 273.15 + T; var lno2 = A1 + A2 * (100 / TS); lno2 += A3 * Math.log(TS / 100) + A4 * (TS / 100); lno2 += S * (B1 + B2 * (TS / 100) + B3 * (TS / 100) * (TS / 100)); var ao = (DO / 100) * Math.pow(Math.E, lno2) * 1.42903; ao = round_data(ao, 3); return ao; } function merge_data(data1, data2) { // 2つのデータを統合して平均化 var count = 0; var val = 0; if (data1 != -1 && data1 != 'Err') { val += parseFloat(data1); count++; } if (data2 != -1 && data2 != 'Err') { val += parseFloat(data2); count++; } if (count == 0) return -1; val /= count; return val; } function merge_dataset(data1, data2) { // 2つのデータセットを統合して平均化 if (data1.length != data2.length) return; var data3 = new Array(data1.length); for (var i = 0; i < data1.length; i++) { data3[i] = merge_data(data1[i], data2[i]); } return data3; }