¶Ô±ÈÐÂÎļþ |
| | |
| | | // å¤çº¿ç¨éé¢éè¦ä¿åçæ°æ® |
| | | let code = ""; |
| | | // è¡¨æ ¼æ°æ®ï¼æ¸²æï¼ |
| | | let tableList = null; |
| | | // æ¹æ³å表 |
| | | let excelMethodList = []; |
| | | // excelåæ æ¯è¾å表 |
| | | let comparisonList = []; |
| | | // å½åæ ·åä¿¡æ¯ |
| | | let currentSample = {}; |
| | | // å½å项ç®ï¼æ£æµä¸å¿ãè£
å¤çµç¼ |
| | | let PROJECT = ""; |
| | | // å¥ç®¡ |
| | | let bushing = ""; |
| | | // å¤çº¿ç¨ä¼ éå°ä¸»çº¿ç¨çæ°æ® |
| | | let result = { |
| | | method: "", |
| | | value: null, |
| | | }; |
| | | |
| | | let modelType = ""; |
| | | |
| | | // ä¿åæ¶ä¼ å°åç«¯åæ° |
| | | let param = null; |
| | | // å½åçæ¨¡æ¿ |
| | | let currentTable = ""; |
| | | // ä¼åæ°éè¾å¤æ°æ®æ¶-è®°å½æåä¸ä¸ªæ£éªé¡¹çid |
| | | let getDataTypeId = null; |
| | | //å½åæ£éªé¡¹ |
| | | let currentInsItem = null; |
| | | // æ¥æ¶å°ä¸»çº¿ç¨å¤çé»è¾çæ¶æ¯ |
| | | self.onmessage = function (event) { |
| | | console.log(2222, event); |
| | | // ä¿å主线ç¨ä¼ è¿æ¥çå¼ |
| | | const data = JSON.parse(event.data); |
| | | if (currentTable != data.currentTable) { |
| | | // æ£éªæ¨¡æ¿æ¹ååéè¦å·æ°è¡¨æ ¼ |
| | | tableList = data.tableList; |
| | | } |
| | | currentTable = data.currentTable; |
| | | if (data.type && data.type == "saveData") { |
| | | // æ´æ°è¡¨æ ¼æ°æ®åä¼ éå°å端çåæ° |
| | | tableList = data.tableList; |
| | | param = data.param; |
| | | return; |
| | | } |
| | | if (data.bushing && data.bushing != bushing && data.type == "saveData") { |
| | | // æ´æ°è¡¨æ ¼æ°æ®ãä¼ éå°å端çåæ°åå¥ç®¡æ°æ® |
| | | tableList = data.tableList; |
| | | param = data.param; |
| | | bushing = data.bushing; |
| | | return; |
| | | } |
| | | modelType = data.modelType; |
| | | code = data.code; |
| | | if (data.getDataTypeId) { |
| | | // è®°å½ ä¼åæ°éè¾å¤æ°æ®æ¶-è®°å½æåä¸ä¸ªæ£éªé¡¹çid |
| | | getDataTypeId = data.getDataTypeId; |
| | | } else { |
| | | getDataTypeId = null; |
| | | } |
| | | if (tableList) { |
| | | // å¦æè¡¨æ ¼æ°æ®åå¨ï¼åæ´æ°å½åä¿®æ¹æ£éªé¡¹çè¡¨æ ¼æ°æ® |
| | | let str = code.split("-"); |
| | | let r = str[1]; |
| | | let c = str[2]; |
| | | tableList[0].arr.forEach((item, index) => { |
| | | item.forEach((m, i) => { |
| | | if (m.c == c && m.r == r) { |
| | | tableList[0].arr[index] = data.tableList[0].arr[index]; |
| | | } |
| | | }); |
| | | }); |
| | | } else { |
| | | // 妿åå§åè¡¨æ ¼æ°æ®ä¸åå¨ï¼ç´æ¥èµå¼ |
| | | tableList = data.tableList; |
| | | } |
| | | if (param) { |
| | | // å¦æä¼ éå°å端çåæ°åå¨ï¼åæ´æ°å½åä¿®æ¹æ£éªé¡¹çä¼ éå°å端çåæ° |
| | | let str = code.split("-"); |
| | | let pId = str[3]; |
| | | param[pId] = data.param[pId]; |
| | | } else { |
| | | // åå§åä¼ éå°å端çåæ° |
| | | param = data.param; |
| | | } |
| | | if (data.currentInsItem) { |
| | | currentInsItem = data.currentInsItem; |
| | | } |
| | | // æ´æ°æ¹æ³å表ãåæ æ¯è¾å表ãå½åæ ·åä¿¡æ¯ãé¡¹ç® |
| | | excelMethodList = JSON.parse(JSON.stringify(data.excelMethodList)); |
| | | comparisonList = JSON.parse(JSON.stringify(data.comparisonList)); |
| | | currentSample = JSON.parse(JSON.stringify(data.currentSample)); |
| | | PROJECT = data.PROJECT; |
| | | // æ§è¡è®¡ç®æ¹æ³ |
| | | changeInput("", code); |
| | | }; |
| | | |
| | | function changeInput(m, code) { |
| | | let str = code.split("-"); |
| | | let r = str[1]; //å½åè¡ |
| | | let c = str[2]; //å½åå |
| | | let id = str[0]; |
| | | let pId = str[3]; //å½åæ£éªé¡¹idï¼param[pId]为å½åæ£éªé¡¹çææå¼ï¼å
å«ï¼è¿ç¨å¼insValueã计ç®å¼comValueã设å¤ç¼ç equipValueã设å¤åç§°equipNameãæç»å¼resValueãç»è®ºinsResult |
| | | var list = []; //ä¸ä¸ªå屿°ç»ï¼éé¢ä¿åæå½å页颿¸²æçæææ°æ® |
| | | // èµå¼å½å模æ¿çè¡¨æ ¼æ°æ® |
| | | for (let a in tableList) { |
| | | if (tableList[a].templateId == id) { |
| | | list = tableList[a].arr; |
| | | break; |
| | | } |
| | | } |
| | | let isToExponential = ""; //æ¯å¦ä¸ºç§å¦è®¡æ°æ³ |
| | | let list2 = []; //ä¸ä¸ªæ°ç»ï¼éé¢ä¿åæå½åæ£éªé¡¹çææåæ°å¼ |
| | | let isPoint = ""; //æ¯å¦ä¸ºå°æ°ç¹ |
| | | let inputType = null; |
| | | let currentInsItemId = ""; |
| | | let isSave = "true"; |
| | | // å¾ªç¯ææexcelæ¹æ³ï¼æ¾å°å½åè¡ãåçæ£éªé¡¹ï¼å¦ææ¤åå
æ ¼ï¼r,cï¼æ¯æä¸ªexcelæ¹æ³éé¢çåæ°ï¼åæ§è¡æ¤æ¹æ³ |
| | | const index = excelMethodList.findIndex((item) => item.r == r); |
| | | excelMethodList.forEach((item) => { |
| | | inputType = |
| | | item.valueList && |
| | | item.valueList.length > 0 && |
| | | item.valueList.find((m) => m.r == r && m.c == c); |
| | | // item.valueList æ¯å½åexcelæ¹æ³çåæ°åè¡¨ï¼æ¾å°å½åå¡«å
¥ç弿¯å¦æ¯åæ° |
| | | if ( |
| | | item.valueList && |
| | | item.valueList.length > 0 && |
| | | item.valueList.find((m) => m.r == r && m.c == c) |
| | | ) { |
| | | isSave = "false"; |
| | | // 妿æ¯ï¼åå®ä¹ä¸ä¸ªåæ°ç对象éåï¼ç¨äºä¿åå½åexcelæ¹æ³åæ°çå¼ |
| | | var comValue = {}; |
| | | item.valueList.forEach((a) => { |
| | | list.forEach((b) => { |
| | | if (b[0].r == a.r) { |
| | | b.forEach((c) => { |
| | | if (c.c == a.c) { |
| | | // è·åå½ååæ°çExeclè¡åæ (ABCD)çç |
| | | var tableCode = ""; |
| | | for (var d in comparisonList) { |
| | | if (c.c == comparisonList[d].value) { |
| | | tableCode = comparisonList[d].label; |
| | | break; |
| | | } |
| | | } |
| | | list2.push(c.v.v); |
| | | // ç»è£
åæ°ç对象éåå¹¶èµå¼ï¼åå¦{A3:12,B4:15} |
| | | if ( |
| | | getInspectionValueType(item.i) == 1 && |
| | | !isNaN(parseFloat(c.v.v)) |
| | | ) { |
| | | // å¦ææ¯æ°åè¾å
¥æ¡ |
| | | let n = String(c.v.v); |
| | | if (n.includes("/")) { |
| | | // 妿æ¯åæ°ï¼åèµå¼ |
| | | comValue[tableCode + (c.r + 1)] = c.v.v; |
| | | } else { |
| | | comValue[tableCode + (c.r + 1)] = parseFloat(c.v.v); |
| | | } |
| | | } else { |
| | | // å¦ææ¯ææ¬ã䏿æ¡çç |
| | | comValue[tableCode + (c.r + 1)] = c.v.v; |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | // 妿æ¤excelæ¹æ³æ¯ç»è®ºå¤ææ¹æ³ï¼åæ§è¡æ¤æ¹æ³ |
| | | // console.log('item.v.ps.value---', item.v.ps.value) |
| | | if (item.v.ps != undefined && item.v.ps.value == "ç»è®º") { |
| | | try { |
| | | if (currentSample.insProduct.find((m) => m.id == item.i)) { |
| | | // 妿å½åæ£éªé¡¹æ¯äº§åæ£éªé¡¹ï¼åæ§è¡æ¤æ¹æ³ï¼æ¾å°æ¤æ£éªé¡¹çè¦æ±å¼ |
| | | let ask = currentSample.insProduct.find((m) => m.id == item.i).ask |
| | | ? currentSample.insProduct |
| | | .find((m) => m.id == item.i) |
| | | .ask.split("&") |
| | | : null; |
| | | // è·åå½åç»è®ºçåæ°ï¼ä¹å°±æ¯å½åæ£éªé¡¹çæç»å¼ |
| | | let res = Object.values(comValue)[0]; |
| | | if (typeof res == "string" && res.includes(">")) { |
| | | res = res.replace(">", ""); |
| | | } |
| | | if (typeof res == "string" && res.includes("â¤")) { |
| | | res = res.replace("â¤", ""); |
| | | } |
| | | if (typeof res == "string" && res.includes("â¥")) { |
| | | res = res.replace("â¥", ""); |
| | | } |
| | | if (typeof res == "string" && res.includes("<")) { |
| | | res = res.replace("<", ""); |
| | | } |
| | | if (typeof res == "string" && res.includes("ï¼")) { |
| | | res = res.replace("ï¼", ""); |
| | | } |
| | | if (typeof res == "string" && res.includes("ï¼")) { |
| | | res = res.replace("ï¼", ""); |
| | | } |
| | | if ( |
| | | typeof res == "string" && |
| | | (res === "æè£" || res === "èå" || res === "æè£èå") |
| | | ) { |
| | | item.v.v = 0; |
| | | list.forEach((a) => { |
| | | if (a[0].r == item.r) { |
| | | for (let b = 0; b < a.length; b++) { |
| | | if (a[b].c == item.c) { |
| | | a[b].v.v = 0; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | let comp = []; |
| | | // 夿å½åç»è®ºçåæ°ï¼å½åæ£éªé¡¹çæç»å¼ï¼æ¯å¦ä¸ºç©ºï¼å¦æä¸ºç©ºï¼åç´æ¥èµå¼ |
| | | if ( |
| | | res === "" || |
| | | res === null || |
| | | res === undefined || |
| | | res === "Infinity" |
| | | ) { |
| | | item.v.v = null; |
| | | list.forEach((a) => { |
| | | if (a[0].r == item.r) { |
| | | for (let b = 0; b < a.length; b++) { |
| | | if (a[b].c == item.c) { |
| | | a[b].v.v = null; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } else { |
| | | // 妿ä¸ä¸ºç©ºï¼å夿å½åç»è®ºå°±éè¦è¿è¡å¤æ |
| | | //è¦æ±å¼ä¸º-ï¼/ï¼âï¼åç»è®ºè®¾ç½®ä¸ºä¸å¤å®ï¼ç»è®ºèµå¼ä¸º3 |
| | | if ( |
| | | ask == null || |
| | | ask[0] == "-" || |
| | | ask[0] == "/" || |
| | | ask[0] == "â" |
| | | ) { |
| | | item.v.v = 3; |
| | | list.forEach((a) => { |
| | | if (a[0].r == item.r) { |
| | | for (let b = 0; b < a.length; b++) { |
| | | if (a[b].c == item.c) { |
| | | a[b].v.v = 3; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } else { |
| | | // è¦æ±å¼ä¸ä¸º-ï¼/ï¼âï¼åè¿è¡å¤æ |
| | | if (ask) { |
| | | // 循ç¯è¦æ±å¼å表ï¼å¤æå½åç»è®ºçåæ°æ¯å¦ç¬¦åè¦æ± |
| | | comp = ask.map((m, i) => { |
| | | // å¦æè¦æ±å¼å
å«=ï¼å夿å½åç»è®ºçåæ°æ¯å¦çäºè¦æ±å¼ï¼ |
| | | // 以ä¸å¤æåºæ¬ä¸è´ï¼åªæ¯å¤æç±»åä¸ä¸æ ·ï¼å°±ä¸å注éäº |
| | | if (m.includes("=")) { |
| | | // å¤çè¦æ±å¼ |
| | | let str = handleFraction(m.split("=")[1]); |
| | | if (typeof res == "string" && typeof str == "string") { |
| | | // å¦æè¦æ±å¼åå½åç»è®ºç忰齿¯å符串ï¼åæ§è¡ |
| | | if (res.includes("/")) { |
| | | // 妿ç»è®ºçåæ°æ¯åæ°ï¼å夿 |
| | | if (m.includes("/")) { |
| | | // å¦æè¦æ±å¼æ¯åæ°ï¼å夿 |
| | | return eval(res) == eval(str); |
| | | } else { |
| | | // å¦æè¦æ±å¼ä¸æ¯åæ°ï¼å夿 |
| | | return handleMoreParam(res, m.split("=")[1], "="); |
| | | } |
| | | } else { |
| | | // 妿ç»è®ºç忰䏿¯åæ°ï¼å夿 |
| | | return ( |
| | | res.trim().replace(/[.,ããï¼ï¼'";?ï¼âï¼]/g, "") == |
| | | str.trim().replace(/[.,ããï¼ï¼'";?ï¼âï¼]/g, "") |
| | | ); |
| | | } |
| | | } else { |
| | | // å¦æè¦æ±å¼åå½åç»è®ºçåæ°æä¸ä¸ªæ¯æ°åï¼åæ§è¡ |
| | | return eval(res) == eval(str); |
| | | } |
| | | } else if (m.includes("â¥")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let str = handleFraction(m.split("â¥")[1]); |
| | | return eval(res) >= eval(str); |
| | | } else { |
| | | return handleMoreParam(res, m.split("â¥")[1], "â¥"); |
| | | } |
| | | } else { |
| | | let str = handleFraction(m.split("â¥")[1]); |
| | | return eval(res) >= eval(str); |
| | | } |
| | | } else if (m.includes("â¤")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let str = handleFraction(m.split("â¤")[1]); |
| | | return eval(res) <= eval(str); |
| | | } else { |
| | | return handleMoreParam(res, m.split("â¤")[1], "â¤"); |
| | | } |
| | | } else { |
| | | let str = handleFraction(m.split("â¤")[1]); |
| | | if (typeof str == "string" && str.includes("A")) { |
| | | str = str.replace("A", ""); |
| | | } |
| | | if (typeof str == "string" && str.includes("D")) { |
| | | str = str.replace("D", ""); |
| | | } |
| | | if (typeof res == "string" && res.includes("A")) { |
| | | res = res.replace("A", ""); |
| | | } |
| | | if (typeof res == "string" && res.includes("D")) { |
| | | res = res.replace("D", ""); |
| | | } |
| | | return eval(res) <= eval(str); |
| | | } |
| | | } else if (m.includes("<")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let str = handleFraction(m.split("<")[1]); |
| | | return eval(res) < eval(str); |
| | | } else { |
| | | return handleMoreParam(res, m.split("<")[1], "<"); |
| | | } |
| | | } else { |
| | | let str = handleFraction(m.split("<")[1]); |
| | | return eval(res) < eval(str); |
| | | } |
| | | } else if (m.includes(">")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let str = handleFraction(m.split(">")[1]); |
| | | return eval(res) > eval(str); |
| | | } else { |
| | | return handleMoreParam(res, m.split(">")[1], ">"); |
| | | } |
| | | } else { |
| | | let str = handleFraction(m.split(">")[1]); |
| | | return eval(res) > eval(str); |
| | | } |
| | | } else if (m.includes("~")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let k = m.split("~"); |
| | | return ( |
| | | eval(res) >= eval(handleFraction(k[0])) && |
| | | eval(res) <= eval(handleFraction(k[1])) |
| | | ); |
| | | } else { |
| | | return handleMoreParam(res, m, "~"); |
| | | } |
| | | } else { |
| | | let k = m.split("~"); |
| | | return ( |
| | | eval(res) >= eval(handleFraction(k[0])) && |
| | | eval(res) <= eval(handleFraction(k[1])) |
| | | ); |
| | | } |
| | | } else if (m.includes("-")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let k = m.split("-"); |
| | | return ( |
| | | eval(res) >= eval(handleFraction(k[0])) && |
| | | eval(res) <= eval(handleFraction(k[1])) |
| | | ); |
| | | } else { |
| | | return handleMoreParam(res, m, "-"); |
| | | } |
| | | } else { |
| | | let k = m.split("-"); |
| | | return ( |
| | | eval(res) >= eval(handleFraction(k[0])) && |
| | | eval(res) <= eval(handleFraction(k[1])) |
| | | ); |
| | | } |
| | | } else if (m.includes("±")) { |
| | | if (modelType.includes("Ï-")) { |
| | | if (m.indexOf("±") == 0) { |
| | | m = |
| | | modelType.substring(modelType.indexOf("-") + 1) + m; |
| | | } |
| | | } |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let k = m.split("±"); |
| | | return ( |
| | | eval(res) >= |
| | | eval( |
| | | handleFraction(k[0]) - handleFraction(k[1]) |
| | | ) && |
| | | eval(res) <= |
| | | eval( |
| | | Number(handleFraction(k[0])) + |
| | | Number(handleFraction(k[1])) |
| | | ) |
| | | ); |
| | | } else { |
| | | return handleMoreParam(res, m, "±"); |
| | | } |
| | | } else { |
| | | let k = m.split("±"); |
| | | return ( |
| | | eval(res) >= |
| | | eval(handleFraction(k[0]) - handleFraction(k[1])) && |
| | | eval(res) <= |
| | | eval( |
| | | Number(handleFraction(k[0])) + |
| | | Number(handleFraction(k[1])) |
| | | ) |
| | | ); |
| | | } |
| | | } else if (m.includes("ï¼")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let str = handleFraction(m.split("ï¼")[1]); |
| | | return eval(res) > eval(str); |
| | | } else { |
| | | return handleMoreParam(res, m.split("ï¼")[1], ">"); |
| | | } |
| | | } else { |
| | | let str = handleFraction(m.split("ï¼")[1]); |
| | | return eval(res) > eval(str); |
| | | } |
| | | } else if (m.includes("ï¼")) { |
| | | if (typeof res == "string" && res.includes("/")) { |
| | | if (m.includes("/")) { |
| | | let str = handleFraction(m.split("ï¼")[1]); |
| | | return eval(res) < eval(str); |
| | | } else { |
| | | return handleMoreParam(res, m.split("ï¼")[1], "<"); |
| | | } |
| | | } else { |
| | | let str = handleFraction(m.split("ï¼")[1]); |
| | | return eval(res) < eval(str); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | // å¦æè¦æ±å¼çæ¯ä¸ªæ¡ä»¶é½ç¬¦åï¼åç»ç»è®ºèµå¼ä¸º1ï¼åæ ¼ |
| | | if (comp.every((m) => m)) { |
| | | item.v.v = 1; |
| | | list.forEach((a) => { |
| | | if (a[0].r == item.r) { |
| | | for (let b = 0; b < a.length; b++) { |
| | | if (a[b].c == item.c) { |
| | | a[b].v.v = 1; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } else { |
| | | // å¦åç»ç»è®ºèµå¼ä¸º0ï¼ä¸åæ ¼ |
| | | item.v.v = 0; |
| | | list.forEach((a) => { |
| | | if (a[0].r == item.r) { |
| | | for (let b = 0; b < a.length; b++) { |
| | | if (a[b].c == item.c) { |
| | | a[b].v.v = 0; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | let getDataType0 = false; |
| | | // ä¼åæ°éè¾å¤æ°æ®æ¶-è®°å½æåä¸ä¸ªæ£éªé¡¹çidï¼å¦æå½åæ£éªé¡¹çidä¸è®°å½çidç¸åï¼åå¤ä¼ ä¸ä¸ªåæ°å°ä¸»çº¿ç¨ï¼è¿è¡æ°æ®ä¿åï¼å¦åæ°éå°±ä¸è¿è¡ä¿å |
| | | if (item.i == getDataTypeId) { |
| | | getDataType0 = true; |
| | | } |
| | | // èµå¼ä¼ éå°ä¸»çº¿ç¨çæ°æ®ï¼methodï¼saveInsContextè¡¨ç¤ºæ¤æ¶æ¯éè¦ä¿åæ°æ® |
| | | currentInsItemId = item.i; |
| | | // èµå¼ä¼ éå°ä¸»çº¿ç¨çæ°æ®ï¼methodï¼saveInsContextè¡¨ç¤ºæ¤æ¶æ¯éè¦ä¿åæ°æ® |
| | | result = { |
| | | method: "saveInsContext", |
| | | value: { |
| | | tableList, // è¡¨æ ¼æ°æ® |
| | | param: getParam(), //ä¼ ç»å端çåæ° |
| | | getDataTypeId: getDataTypeId, |
| | | currentInsItemId: item.i, |
| | | }, |
| | | }; |
| | | // åæ¶æ¯ç»ä¸»çº¿ç¨ |
| | | self.postMessage(JSON.stringify(result)); |
| | | } |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } else { |
| | | // 妿æ¯å½æ°æ¹æ³ï¼åæ§è¡æ¤æ¹æ³ |
| | | let comResult = ""; //åå§å计ç®ç»æ |
| | | try { |
| | | if (getInspectionValueType(item.i) == 1) { |
| | | // 妿æ£éªå¼ç±»åæ¯æ°åè¾å
¥æ¡ |
| | | let tell = currentSample.insProduct.find((m) => m.id == item.i).tell |
| | | ? currentSample.insProduct |
| | | .find((m) => m.id == item.i) |
| | | .tell.split("&") |
| | | : null; |
| | | isPoint = |
| | | tell && |
| | | tell.length > 0 && |
| | | typeof tell[0] == "string" && |
| | | tell[0].includes("/") && |
| | | tell[0] !== "/"; // è£
å¤çµç¼--å¤æè¦æ±å¼æ¯å¦ä¸ºåæ° |
| | | const inspectionItemClass = currentSample.insProduct.find( |
| | | (m) => m.id == item.i |
| | | ).inspectionItemClass; // æ£éªé¡¹åç±» |
| | | const inspectionItem = currentSample.insProduct.find( |
| | | (m) => m.id == item.i |
| | | ).inspectionItem; // æ£éªé¡¹ |
| | | const inspectionItemSubclass = currentSample.insProduct.find( |
| | | (m) => m.id == item.i |
| | | ).inspectionItemSubclass; // æ£éªå项 |
| | | let isHaveSymbol = false; |
| | | let symbol = ""; |
| | | for (var a in comValue) { |
| | | if ( |
| | | typeof comValue[a] == "string" && |
| | | (comValue[a].includes(">") || |
| | | comValue[a].includes("â¤") || |
| | | comValue[a].includes("<") || |
| | | comValue[a].includes("â¥") || |
| | | comValue[a].includes("ï¼") || |
| | | comValue[a].includes("ï¼")) |
| | | ) { |
| | | if (comValue[a].includes(">")) { |
| | | symbol = ">"; |
| | | } else if (comValue[a].includes("â¤")) { |
| | | symbol = "â¤"; |
| | | } else if (comValue[a].includes("â¥")) { |
| | | symbol = "â¥"; |
| | | } else if (comValue[a].includes("ï¼")) { |
| | | symbol = "ï¼"; |
| | | } else if (comValue[a].includes("ï¼")) { |
| | | symbol = "ï¼"; |
| | | } else { |
| | | symbol = "<"; |
| | | } |
| | | isHaveSymbol = true; |
| | | break; |
| | | } |
| | | } |
| | | // æ ¹æ®è¾å
¥çæ°å¼ï¼è¿è¡è®¡ç® |
| | | comResult = compute(item.v.f.replace(/=/g, " "), comValue, isPoint); |
| | | // æ£éªé¡¹ä¸ºå¯åº¦æ¶ï¼æ ¹æ®è¦æ±å¼çå°æ°ä½æ¹åæç»å¼çå°æ°ä½ |
| | | if (inspectionItem == "å¯åº¦") { |
| | | const str = "" + tell; |
| | | const indexOfDecimal = str.indexOf("."); |
| | | if (indexOfDecimal > -1) { |
| | | const length = str.length - indexOfDecimal - 1; |
| | | comResult = comResult.toFixed(length); |
| | | } |
| | | } else if ( |
| | | inspectionItemClass == "夿¤å¥æºæ¢°ç©çæ§è½" && |
| | | inspectionItem == "å¨IRM 902ç¿ç©æ²¹ä¸æµ¸æ³¡å" && |
| | | (inspectionItemSubclass == "æè£ä¼¸é¿çååç" || |
| | | inspectionItemSubclass == "æå¼ 强度ååç") |
| | | ) { |
| | | comResult = Math.round(comResult).toFixed(0); |
| | | } else if ( |
| | | typeof comResult == "string" && |
| | | (comResult.includes("æè£") || comResult.includes("èå")) |
| | | ) { |
| | | comResult = comResult + ""; |
| | | } |
| | | if (inspectionItem === "鵿°ç¡¬åº¦" && tell[0].includes("A")) { |
| | | // è¦æ±å¼å¦ææå
å«åæ¯ï¼æç»ç»æè¦å±ç¤ºåºåæ¯ |
| | | comResult = comResult + "A"; |
| | | } |
| | | if ( |
| | | inspectionItemClass === "ç»ç¼æºæ¢°ç©çæ§è½" && |
| | | inspectionItem === "å¼¯æ²æ§è½" && |
| | | inspectionItemSubclass === "æå°å¼¯æ²åå¾" && |
| | | tell[0].includes("D") |
| | | ) { |
| | | // è¦æ±å¼å¦ææå
å«åæ¯ï¼æç»ç»æè¦å±ç¤ºåºåæ¯ |
| | | comResult = comResult + "D"; |
| | | } |
| | | if (isHaveSymbol) { |
| | | comResult = symbol + comResult; |
| | | } |
| | | let list3 = list2.map((item) => item + ""); |
| | | // å¤æå¡«çæ£éªå¼æ¯å¦ä¸ºç§å¦è®¡æ°æ³ï¼å¦æä¸ºç§å¦è®¡æ°æ³ï¼åè¿è¡è½¬å |
| | | isToExponential = list3.some( |
| | | (val) => val.includes("e+") || val.includes("e-") |
| | | ); |
| | | if (isToExponential) { |
| | | let num2 = new Big(comResult); |
| | | comResult = num2.toExponential(1); |
| | | } |
| | | } else { |
| | | // 妿æ£éªå¼ç±»åæ¯ææ¬è¾å
¥æ¡ãä¸ææ¡ |
| | | let valueList = []; |
| | | // å¤çexcel彿°åæ°å表 |
| | | item.valueList.forEach((a) => { |
| | | valueList.push({ |
| | | name: `${comparisonList.find((e) => e.value == a.c).label}${ |
| | | a.r + 1 |
| | | }`, |
| | | value: 0, |
| | | }); |
| | | }); |
| | | // ç»excel彿°åæ°èµææ¬å¼ |
| | | for (var a in comValue) { |
| | | valueList.forEach((b) => { |
| | | if (b.name == a) { |
| | | b.value = comValue[a]; |
| | | } |
| | | }); |
| | | } |
| | | // 计ç®å
¬å¼ï¼å»æexcel彿°ççå·ï¼å¹¶æ¿æ¢åæ°ï¼åå¦ï¼=A1 åæ A1 åæ âææ¬è¾å
¥çå¼â |
| | | let str = item.v.f.replace(/=/g, " "); |
| | | valueList.forEach((b) => { |
| | | str = str.replace(b.name, b.value); |
| | | }); |
| | | // 计ç®ç»æèµå¼ |
| | | comResult = str; |
| | | } |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | try { |
| | | // 循ç¯è¡¨æ ¼æ°æ®ï¼ç»è¡¨æ ¼æ°æ®è¿è¡èµå¼ |
| | | list.forEach((a) => { |
| | | if (a[0].r == item.r && comResult !== "") { |
| | | // 夿å½åè¡æ¯å¦ä¸ºå½åæ£éªé¡¹æå¨è¡ï¼å¦æä¸ºå½åè¡ï¼åç»è¡¨æ ¼æ°æ®èµå¼ |
| | | for (var b in a) { |
| | | if (a[b].c == item.c) { |
| | | try { |
| | | if (comResult == 0) { |
| | | // å¤æè®¡ç®ç»ææ¯å¦ä¸º0ï¼å¦æä¸º0ï¼åç»è¡¨æ ¼æ°æ®èµå¼ä¸º0 |
| | | a[b].v.v = 0; |
| | | } else if ( |
| | | a[b].v.ct && |
| | | a[b].v.ct.fa && |
| | | typeof a[b].v.ct.fa == "string" && |
| | | a[b].v.ct.fa.includes(".") |
| | | ) { |
| | | // 夿å½ååå
æ ¼æ¯å¦ä¿çå°æ°ç¹ï¼å¦æä¸ºä¿çå°æ°ç¹ï¼åç»è¡¨æ ¼æ°æ®èµå¼ä¸ºä¿çå°æ°ç¹ï¼è¿ä¸ªæ¯æ ¹æ®æ¨¡æ¿é
ç½®å°æ°ç¹æ¥ç |
| | | let num = 0; |
| | | let str = a[b].v.ct.fa.split(".")[1]; |
| | | num = str.length; |
| | | a[b].v.v = comResult |
| | | ? Number(comResult).toFixed(num) |
| | | : comResult; |
| | | } else if ( |
| | | typeof comResult == "string" && |
| | | (comResult.includes("e+") || comResult.includes("e-")) |
| | | ) { |
| | | // å¤æè®¡ç®ç»ææ¯å¦ä¸ºç§å¦è®¡æ°æ³ï¼å¦æä¸ºç§å¦è®¡æ°æ³ï¼åç»è¡¨æ ¼æ°æ®èµå¼ä¸ºç§å¦è®¡æ°æ³ |
| | | a[b].v.v = comResult; |
| | | } else { |
| | | const inspectionItem = currentSample.insProduct.find( |
| | | (m) => m.id == item.i |
| | | ).inspectionItem; |
| | | // å¤æè®¡ç®ç»ææ¯å¦ä¸ºæ°åï¼å¦æä¸ºæ°åï¼åç»è¡¨æ ¼æ°æ®èµå¼ä¸ºæ°å |
| | | if (inspectionItem == "é线çµé»çÏ20æå¤§å¼") { |
| | | let val = parseFloat(Number(comResult).toFixed(5)); |
| | | a[b].v.v = isNaN(val) ? comResult : val; |
| | | } else { |
| | | let val = parseFloat(Number(comResult).toFixed(3)); |
| | | a[b].v.v = isNaN(val) ? comResult : val; |
| | | } |
| | | } |
| | | } catch (error) { |
| | | // 妿以ä¸å¤æé½ä¸æ¯æï¼åç´æ¥èµå¼ |
| | | a[b].v.v = comResult; |
| | | console.log("error---", error); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | // 妿æ¤è®¡ç®ç»ææå±åå
æ ¼ï¼åæ¶ä¹æ¯å¦ä¸ä¸ªexcel彿°çåæ°ï¼é£ä¹å°±éè¦éå½è¿è¡è®¡ç® |
| | | changeInput(comResult, `${id}-${item.r}-${item.c}-${pId}`); //æ¹åæç»å¼ |
| | | currentInsItemId = item.i; |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | if (index === -1 || (inputType === undefined && isSave === "true")) { |
| | | // èµå¼ä¼ éå°ä¸»çº¿ç¨çæ°æ®ï¼methodï¼saveInsContextè¡¨ç¤ºæ¤æ¶æ¯éè¦ä¿åæ°æ® |
| | | result = { |
| | | method: "saveInsContext", |
| | | value: { |
| | | tableList, // è¡¨æ ¼æ°æ® |
| | | param: getParam(), //ä¼ ç»å端çåæ° |
| | | getDataTypeId: getDataTypeId, |
| | | currentInsItemId: currentInsItemId, |
| | | }, |
| | | }; |
| | | // åæ¶æ¯ç»ä¸»çº¿ç¨ |
| | | self.postMessage(JSON.stringify(result)); |
| | | } |
| | | |
| | | // èµå¼å¤çº¿ç¨ä¼ è¾æ°æ® |
| | | result = { |
| | | method: "tableList", |
| | | value: tableList, |
| | | }; |
| | | // åéä¸»çº¿ç¨æ°æ® |
| | | self.postMessage(JSON.stringify(result)); |
| | | try { |
| | | // èµå¼å¤çº¿ç¨ä¼ è¾æ°æ® |
| | | result = { |
| | | method: "getCurrentInsProduct", |
| | | value: pId, |
| | | }; |
| | | // åéä¸»çº¿ç¨æ°æ® |
| | | self.postMessage(JSON.stringify(result)); |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * è·åæ£æµå¼ç±»å |
| | | * |
| | | * @param id æ£æµå¼ç±»å对åºçid |
| | | * @returns è¿åæ£æµå¼ç±»å |
| | | */ |
| | | function getInspectionValueType(id) { |
| | | for (var a in currentSample.insProduct) { |
| | | if (currentSample.insProduct[a].id == id) { |
| | | return currentSample.insProduct[a].inspectionValueType; |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * å¤çåæ°æå¸¦æä¹æ³å乿¹çå符串 |
| | | * |
| | | * @param str å符串类åï¼è¡¨ç¤ºè¦å¤ççåæ°æä¹æ¹è¡¨è¾¾å¼ |
| | | * @returns è¿åä¸ä¸ªæ°åæåå符串ï¼å¦æå符串为ææçåæ°æä¹æ¹è¡¨è¾¾å¼ï¼åè¿å计ç®ç»æï¼å¦åè¿ååå符串 |
| | | */ |
| | | function handleFraction(str) { |
| | | if (str && typeof str == "string" && str.includes("/")) { |
| | | // å¤çåæ° |
| | | return eval(str.split("/")[0] / str.split("/")[1]); |
| | | } else if ( |
| | | str && |
| | | typeof str == "string" && |
| | | str.includes("*") && |
| | | str.includes("^") |
| | | ) { |
| | | // 计ç®ä¹æ¹ |
| | | const num1 = str.split("*"); |
| | | const num2 = num1[1].split("^"); |
| | | let num3 = new Big(num2[0]); |
| | | let num4 = new Big(num2[1]); |
| | | let num5 = Math.pow(num3, num4); // è®¡ç®æ¬¡æ¹ |
| | | return num1[0] * num5; // æå计ç®ä¹æ³ |
| | | } else { |
| | | return str; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¤ç带æå¤ä¸ªåæ°ç彿° |
| | | * |
| | | * @param res å符串ï¼éè¦è¢«åå²å¹¶å¤ççå符串 |
| | | * @param str å符串ï¼ä¸resä¸çæ¯ä¸é¡¹è¿è¡æ¯è¾çå符串ï¼å¯è½æ¯åæ°æè
å¸¦ææ¯è¾ç¬¦å·çå符串 |
| | | * @param comp å符串ï¼è¡¨ç¤ºæ¯è¾ç±»åçå符ï¼å¦ '>'ã'<'ã'='ã'â¥'ã'â¤'ã'±'ã'~'ã'-'ï¼ |
| | | * @returns è¿åå¸å°å¼ï¼å¦æres䏿¯ä¸é¡¹é½æ»¡è¶³ä¸strçæ¯è¾æ¡ä»¶ï¼åè¿åtrueï¼å¦åè¿åfalse |
| | | */ |
| | | function handleMoreParam(res, str, comp) { |
| | | let arr = res.split("/"); |
| | | let arr0 = arr.every((item) => { |
| | | switch (comp) { |
| | | case ">": |
| | | return item > handleFraction(str); |
| | | case "<": |
| | | return item < handleFraction(str); |
| | | case "=": |
| | | return item == handleFraction(str); |
| | | case "â¥": |
| | | return item >= handleFraction(str); |
| | | case "â¤": |
| | | return item <= handleFraction(str); |
| | | case "±": |
| | | let k = str.split("±"); |
| | | return ( |
| | | item >= eval(handleFraction(k[0]) - handleFraction(k[1])) && |
| | | item <= |
| | | eval(Number(handleFraction(k[0])) + Number(handleFraction(k[1]))) |
| | | ); |
| | | case "~": |
| | | let j = str.split("~"); |
| | | return ( |
| | | item >= eval(handleFraction(j[0])) && |
| | | item <= eval(handleFraction(j[1])) |
| | | ); |
| | | case "-": |
| | | let o = str.split("-"); |
| | | return ( |
| | | item >= eval(handleFraction(o[0])) && |
| | | item <= eval(handleFraction(o[1])) |
| | | ); |
| | | } |
| | | }); |
| | | if (arr0) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·ååæ° |
| | | * |
| | | * @returns è¿åå¤çåçåæ°å¯¹è±¡ |
| | | */ |
| | | function getParam() { |
| | | tableList[0].arr.forEach((a) => { |
| | | a.forEach((b) => { |
| | | // åå§åä¼ éå°å端çåæ° |
| | | if (param[b.i]) { |
| | | param[b.i].insValue = []; |
| | | param[b.i].comValue = []; |
| | | param[b.i].equipValue = []; |
| | | param[b.i].equipName = []; |
| | | param[b.i].resValue = null; |
| | | param[b.i].insResult = null; |
| | | } |
| | | }); |
| | | }); |
| | | tableList[0].arr.forEach((a) => { |
| | | a.forEach((b) => { |
| | | // æ ¹æ®è¡¨æ ¼æ°æ®ï¼èµå¼ä¼ éå°å端çåæ° |
| | | if ( |
| | | b.v.ps != undefined && |
| | | typeof b.v.ps.value == "string" && |
| | | b.v.ps.value.includes("æ£éªå¼") |
| | | ) { |
| | | // èµå¼æ£éªå¼ |
| | | b.i && b.v.v && param[b.i].insValue.push(b); |
| | | } |
| | | if (b.v.ps != undefined && b.v.ps.value === "计ç®å¼") { |
| | | // èµå¼è®¡ç®å¼ |
| | | b.i && |
| | | b.v.v && |
| | | b.valueList && |
| | | b.valueList.length > 0 && |
| | | param[b.i].comValue.push(b); |
| | | } |
| | | if (b.v.ps != undefined && b.v.ps.value === "设å¤ç¼ç ") { |
| | | // èµå¼è®¾å¤ç¼ç |
| | | b.i && b.v && param[b.i].equipValue.push(b); |
| | | } |
| | | if (b.v.ps != undefined && b.v.ps.value === "设å¤åç§°") { |
| | | // èµå¼è®¾å¤åç§° |
| | | b.i && b.v && param[b.i].equipName.push(b); |
| | | } |
| | | if (b.v.ps != undefined && b.v.ps.value === "æç»å¼") { |
| | | // èµå¼æç»å¼ |
| | | b.i && |
| | | b.v && |
| | | b.valueList && |
| | | b.valueList.length > 0 && |
| | | (param[b.i].resValue = b); |
| | | } |
| | | if (b.v.ps != undefined && b.v.ps.value === "ç»è®º") { |
| | | if (b.i && (b.v.v || b.v.v === 0 || b.v.v === "0")) { |
| | | if (b.v.v != "åæ ¼" && b.v.v != "ä¸åæ ¼") { |
| | | // èµå¼ç»è®º |
| | | param[b.i].insResult = b; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | }); |
| | | return param; |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å¤ä¸ªæ°å¼çå |
| | | * |
| | | * @param val æ°å¼ååæ°ï¼å¯åé¿åæ°å表 |
| | | * @returns è¿åææåæ°çåï¼å¦æåæ°å表为空æåæ°ç±»åéæ°å¼åï¼åè¿ånull |
| | | */ |
| | | function SUM(...val) { |
| | | try { |
| | | let num = null; |
| | | if ( |
| | | val != null && |
| | | val != undefined && |
| | | val != "undefined" && |
| | | val != "NaN" && |
| | | val.length > 0 |
| | | ) { |
| | | val.forEach((item) => { |
| | | num += item; |
| | | }); |
| | | } |
| | | return num; |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * 计ç®ä¼ å
¥åæ°ä¸çæå¤§å¼ |
| | | * |
| | | * @param ...val å¯ååæ°å表ï¼ç¨äºè®¡ç®æå¤§å¼çæ°å¼æå¯è½¬æ¢ä¸ºæ°å¼çç±»å |
| | | * @returns è¿åæå¤§å¼ï¼å¦æåæ°å表为空æä¸ºnull/undefined/''ï¼åè¿ånull |
| | | */ |
| | | function MAX(...val) { |
| | | try { |
| | | let max = null; |
| | | if ( |
| | | val != null && |
| | | val != undefined && |
| | | val != "undefined" && |
| | | val != "NaN" && |
| | | val.length > 0 |
| | | ) { |
| | | val = val.filter((item) => item != null && item !== ""); |
| | | if (val.length > 0) { |
| | | max = Math.max(...val); |
| | | } else { |
| | | max = null; |
| | | } |
| | | } |
| | | return max; |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * IF夿 |
| | | * |
| | | * |
| | | * |
| | | */ |
| | | function IF(...val) { |
| | | try { |
| | | let ifNUm = null; |
| | | if ( |
| | | val != null && |
| | | val != undefined && |
| | | val != "undefined" && |
| | | val != "NaN" && |
| | | val.length > 0 |
| | | ) { |
| | | if (val[0] === "" || val[0] == 0 || val[0] === " ") { |
| | | ifNUm = val[1]; |
| | | } else { |
| | | ifNUm = val[0]; |
| | | } |
| | | } |
| | | return ifNUm; |
| | | } catch (error) { |
| | | console.log("IFerror---", error); |
| | | } |
| | | } |
| | | /** |
| | | * 计ç®ä¼ å
¥åæ°ä¸çæå°å¼ |
| | | * |
| | | * @param val å¯ååæ°ï¼ç¨äºè®¡ç®æå°å¼çæ°å¼æ°ç» |
| | | * @returns è¿åä¼ å
¥åæ°ä¸çæå°å¼ï¼å¦æä¼ å
¥åæ°ä¸ºç©ºæææå¼å为nullæç©ºå符串ï¼åè¿ånull |
| | | */ |
| | | function MIN(...val) { |
| | | try { |
| | | let min = null; |
| | | if ( |
| | | val != null && |
| | | val != undefined && |
| | | val != "undefined" && |
| | | val != "NaN" && |
| | | val.length > 0 |
| | | ) { |
| | | val = val.filter((item) => item != null && item !== ""); |
| | | if (val.length > 0) { |
| | | min = Math.min(...val); |
| | | } |
| | | } |
| | | return min; |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * 计ç®ç»å®æ°å¼çå¹³åå¼ |
| | | * |
| | | * @param val æ°å¼å表ï¼å¯å
å«ä»»æä¸ªåæ° |
| | | * @returns è¿åå¹³åå¼ï¼å¦ææ°å¼å表为空æå
å«éæ°å¼é¡¹ï¼åè¿ånull |
| | | */ |
| | | function AVERAGE(...val) { |
| | | try { |
| | | let num = null; |
| | | let arr = []; |
| | | if ( |
| | | val != null && |
| | | val != undefined && |
| | | val != "undefined" && |
| | | val != "NaN" && |
| | | val.length > 0 |
| | | ) { |
| | | arr = val.filter( |
| | | (item) => item !== null && item !== "" && item != undefined |
| | | ); |
| | | arr.forEach((item) => { |
| | | num += item; |
| | | }); |
| | | if (arr.length > 0) { |
| | | return num / arr.length; |
| | | } else { |
| | | return null; |
| | | } |
| | | } else { |
| | | return null; |
| | | } |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * åæ´æ° |
| | | * |
| | | * @param val ä»»ææ°å¼ |
| | | * @returns è¿å该æ°å¼çæ´æ° |
| | | */ |
| | | function INT(val) { |
| | | try { |
| | | return Math.round(val); |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * 计ç®ä¸ä¸ªæ°çç»å¯¹å¼ |
| | | * |
| | | * @param val ä»»ææ°å¼ |
| | | * @returns è¿å该æ°å¼çç»å¯¹å¼ |
| | | */ |
| | | function ABS(val) { |
| | | try { |
| | | return Math.abs(val); |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * 计ç®ä¸ç»æ°åçä¸ä½æ° |
| | | * |
| | | * @param val ä»»æä¸ªåæ°ï¼éè¦è®¡ç®ä¸ä½æ°çæ°å |
| | | * @returns 妿忰䏿ææçæ°åï¼åè¿å计ç®åºçä¸ä½æ°ï¼å¦åè¿ånull |
| | | */ |
| | | function MEDIAN(...val) { |
| | | try { |
| | | let arr = []; |
| | | if (val && val.length > 0) { |
| | | arr = val.filter((item) => item != null && item !== ""); |
| | | const sortedArr = arr.sort((a, b) => a - b); |
| | | // 计ç®ä¸ä½æ° |
| | | const half = Math.floor(sortedArr.length / 2); |
| | | if (arr.length > 0) { |
| | | // 妿æ°ç»é¿åº¦æ¯å¥æ°ï¼ç´æ¥åä¸é´çå
ç´ |
| | | if (sortedArr.length % 2 === 1) { |
| | | return sortedArr[half]; |
| | | } else { |
| | | // 妿æ°ç»é¿åº¦æ¯å¶æ°ï¼åä¸é´ä¸¤ä¸ªå
ç´ çå¹³åå¼ |
| | | return (sortedArr[half - 1] + sortedArr[half]) / 2; |
| | | } |
| | | } else { |
| | | return null; |
| | | } |
| | | } else { |
| | | return null; |
| | | } |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å¹ |
| | | * |
| | | * @param str å符串形å¼çå¹è¡¨è¾¾å¼ï¼ä¾å¦"2^3" |
| | | * @returns è¿å计ç®åçå¹å¼ï¼å¦æè¡¨è¾¾å¼æ æåè¿ånull |
| | | */ |
| | | function CalculatePower(str) { |
| | | try { |
| | | if (str && str.includes("^")) { |
| | | let arr = str.split("^"); |
| | | if (arr && arr.length > 1) { |
| | | return Math.pow(arr[0], arr[1]); |
| | | } else { |
| | | return null; |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * 转æ¢Ï |
| | | * |
| | | * |
| | | * |
| | | */ |
| | | function PI() { |
| | | try { |
| | | return 3.1415926; |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | /** |
| | | * 计ç®LOG |
| | | * |
| | | * |
| | | * |
| | | */ |
| | | function LOG(...val) { |
| | | try { |
| | | let LOGNUm = null; |
| | | if ( |
| | | val != null && |
| | | val != undefined && |
| | | val != "undefined" && |
| | | val != "NaN" && |
| | | val.length > 0 |
| | | ) { |
| | | val = val.filter((item) => item != null && item !== ""); |
| | | if (val.length > 0) { |
| | | LOGNUm = Math.log(val[0]); |
| | | } |
| | | } |
| | | // console.log(LOGNUm); |
| | | return LOGNUm; |
| | | } catch (error) { |
| | | console.log("error---", error); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®åæ è·ååå |
| | | * @param {Object} cellId |
| | | */ |
| | | function getColumnNameFromId(cellId) { |
| | | try { |
| | | if (!Array.isArray(cellId)) { |
| | | cellId = cellId.split("-"); |
| | | } |
| | | var i = cellId[0]; |
| | | var letter = ""; |
| | | if (i > 701) { |
| | | letter += String.fromCharCode(64 + parseInt(i / 676)); |
| | | letter += String.fromCharCode(64 + parseInt((i % 676) / 26)); |
| | | } else if (i > 25) { |
| | | letter += String.fromCharCode(64 + parseInt(i / 26)); |
| | | } |
| | | letter += String.fromCharCode(65 + (i % 26)); |
| | | return letter + (parseInt(cellId[1]) + 1); |
| | | } catch (e) { |
| | | console.log("error", e); |
| | | } |
| | | } |
| | | /** |
| | | * æ ¹æ®ååè·ååæ |
| | | * @param {Object} id |
| | | * @param {Object} arr |
| | | */ |
| | | function getIdFromColumnName(id, arr) { |
| | | try { |
| | | // Get the letters |
| | | var t = /^[a-zA-Z]+/.exec(id); |
| | | if (t) { |
| | | // Base 26 calculation |
| | | var code = 0; |
| | | for (var i = 0; i < t[0].length; i++) { |
| | | code += |
| | | parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, t[0].length - 1 - i); |
| | | } |
| | | code--; |
| | | // Make sure jexcel starts on zero |
| | | if (code < 0) { |
| | | code = 0; |
| | | } |
| | | |
| | | // Number |
| | | var number = parseInt(/[0-9]+$/.exec(id)); |
| | | if (number > 0) { |
| | | number--; |
| | | } |
| | | |
| | | if (arr == true) { |
| | | id = [code, number]; |
| | | } else { |
| | | // id = code + '-' + number; |
| | | id = { |
| | | c: code, |
| | | r: number, |
| | | }; |
| | | } |
| | | } |
| | | return id; |
| | | } catch (e) { |
| | | console.log("error", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ´æ¹åæ° |
| | | * |
| | | * @param f åæ°å表 |
| | | * @returns è¿åä¸ä¸ªå
å«åæ ä¿¡æ¯çæ°ç» |
| | | */ |
| | | function changeParameter(f) { |
| | | try { |
| | | let arr = getABCList(f); |
| | | let arr2 = []; |
| | | arr.forEach((item) => { |
| | | // 夿æ¯å¦ä¸ºèå´ï¼åå¦MAX(A1:B2) |
| | | if (item.includes(":")) { |
| | | let r0 = getIdFromColumnName(item.split(":")[0]).r; |
| | | let c0 = getIdFromColumnName(item.split(":")[0]).c; |
| | | let r1 = getIdFromColumnName(item.split(":")[1]).r; |
| | | let c1 = getIdFromColumnName(item.split(":")[1]).c; |
| | | for (let i = Number(r0); i <= Number(r1); i++) { |
| | | for (let u = Number(c0); u <= Number(c1); u++) { |
| | | arr2.push({ |
| | | r: i, |
| | | c: u, |
| | | }); |
| | | } |
| | | } |
| | | } else { |
| | | // 没æåç´æ¥è·å |
| | | arr2.push(getIdFromColumnName(item)); |
| | | } |
| | | }); |
| | | return arr2; |
| | | } catch (error) { |
| | | console.log("error", error); |
| | | } |
| | | } |
| | | /** |
| | | * è·åå
å« ABC å符çå表 |
| | | * |
| | | * @param f å符串ï¼å
å«éè¦è§£æçå
¬å¼æè¡¨è¾¾å¼ |
| | | * @returns å
å« ABC åç¬¦çæ°ç»å表 |
| | | */ |
| | | function getABCList(f) { |
| | | try { |
| | | let regex = /[=\+\-\*\%\(\)\/\^\s]/g; |
| | | // ä¸é¢è®¡ç®å½æ°æ°å¢åï¼è¿éä¹è¦åæ¥å¢å |
| | | let fouList = [ |
| | | "SUM", |
| | | "MAX", |
| | | "MIN", |
| | | "AVERAGE", |
| | | "ABS", |
| | | "PI", |
| | | "INT", |
| | | "IF", |
| | | "LOG", |
| | | ]; |
| | | // æ¿æ¢ç¹æ®å符 |
| | | f = f |
| | | .replace(regex, ",") |
| | | .replace(new RegExp('"&', "g"), "") |
| | | .replace(new RegExp('&"', "g"), ""); |
| | | fouList.forEach((item) => { |
| | | f = f.replace(new RegExp(item, "g"), ","); |
| | | }); |
| | | let arr = f.split(",").filter((item) => { |
| | | return ( |
| | | item && /[a-zA-Z]/.test(item) && item != "undefined" && item != "null" |
| | | ); |
| | | }); |
| | | return arr; |
| | | } catch (error) { |
| | | console.log("error", error); |
| | | } |
| | | } |
| | | /** |
| | | * è·åææåå
æ ¼ |
| | | * |
| | | * @param f è¡¨æ ¼æ°æ®æç¸å
³åæ° |
| | | * @returns è¿åä¸ä¸ªå¯¹è±¡ï¼å
¶é®ä¸ºåå
æ ¼çå¯ä¸æ è¯ç¬¦ï¼ç±ååè¡IDæ¼æ¥èæï¼ï¼å¼ä¸ºnull |
| | | */ |
| | | function getAllCell(f) { |
| | | try { |
| | | let arr = changeParameter(f); |
| | | let arr0 = {}; |
| | | arr.forEach((item) => { |
| | | arr0[getColumnNameFromId(`${item.c}` + "-" + `${item.r}`)] = null; |
| | | }); |
| | | return arr0; |
| | | } catch (error) { |
| | | console.log("error", error); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å½æ° |
| | | * |
| | | * @param f å符串类åï¼è¡¨ç¤ºå¾
计ç®çå
¬å¼ |
| | | * @param comValue 对象类åï¼è¡¨ç¤ºè¦æ¿æ¢çåå
æ ¼å¼ï¼é®ä¸ºåå
æ ¼åç§°ï¼å¼ä¸ºæ¿æ¢åçå¼ |
| | | * @returns è¿å计ç®åçç»æï¼å¦æè®¡ç®å¤±è´¥åè¿å0 |
| | | */ |
| | | function compute(f, comValue, isPoint) { |
| | | try { |
| | | let str = f; |
| | | // è·ååå
æ ¼å¯¹åºå¼ |
| | | let arr = getAllCell(f); |
| | | for (var a in comValue) { |
| | | if (typeof comValue[a] == "string" && comValue[a].includes(">")) { |
| | | comValue[a] = comValue[a].replace(">", ""); |
| | | } |
| | | if (typeof comValue[a] == "string" && comValue[a].includes("â¤")) { |
| | | comValue[a] = comValue[a].replace("â¤", ""); |
| | | } |
| | | if (typeof comValue[a] == "string" && comValue[a].includes("â¥")) { |
| | | comValue[a] = comValue[a].replace("â¥", ""); |
| | | } |
| | | if (typeof comValue[a] == "string" && comValue[a].includes("<")) { |
| | | comValue[a] = comValue[a].replace("<", ""); |
| | | } |
| | | if (typeof comValue[a] == "string" && comValue[a].includes("ï¼")) { |
| | | comValue[a] = comValue[a].replace("ï¼", ""); |
| | | } |
| | | if (typeof comValue[a] == "string" && comValue[a].includes("ï¼")) { |
| | | comValue[a] = comValue[a].replace("ï¼", ""); |
| | | } |
| | | if ( |
| | | comValue[a] !== "undefined" && |
| | | comValue[a] !== "null" && |
| | | comValue[a] !== undefined |
| | | ) { |
| | | if (typeof comValue[a] == "string" && comValue[a].includes("^")) { |
| | | // 计ç®å¹æ¬¡ |
| | | arr[a] = CalculatePower(comValue[a]); |
| | | } else { |
| | | arr[a] = comValue[a]; |
| | | } |
| | | } |
| | | } |
| | | // è§£æå
¬å¼åæ°ï¼ç¹å«æ¯å¸¦ï¼ç |
| | | let arr0 = getABCList(f); |
| | | let obj = {}; |
| | | arr0.forEach((item) => { |
| | | if (item.includes(":")) { |
| | | let arr1 = []; |
| | | let r0 = getIdFromColumnName(item.split(":")[0]).r; |
| | | let c0 = getIdFromColumnName(item.split(":")[0]).c; |
| | | let r1 = getIdFromColumnName(item.split(":")[1]).r; |
| | | let c1 = getIdFromColumnName(item.split(":")[1]).c; |
| | | for (let i = Number(r0); i <= Number(r1); i++) { |
| | | for (let u = Number(c0); u <= Number(c1); u++) { |
| | | arr1.push({ |
| | | r: i, |
| | | c: u, |
| | | }); |
| | | } |
| | | } |
| | | let arr2 = []; |
| | | arr1.forEach((m) => { |
| | | arr2.push(getColumnNameFromId(`${m.c}` + "-" + `${m.r}`)); |
| | | }); |
| | | obj[item.split(":").join("-")] = arr2.join(","); |
| | | } else { |
| | | obj[item] = item; |
| | | } |
| | | }); |
| | | str = str.replace(new RegExp(":", "g"), "-"); |
| | | // æ¿æ¢åæ° |
| | | for (var a in obj) { |
| | | str = str.replace(new RegExp(a, "g"), obj[a]); |
| | | } |
| | | // è®¡ç® |
| | | for (var a in arr) { |
| | | str = str.replace(new RegExp(a, "g"), arr[a]); |
| | | } |
| | | if (str.includes(",,")) { |
| | | str = str.replace(new RegExp(",,", "g"), ","); |
| | | } |
| | | if (str.includes(",,")) { |
| | | str = str.replace(new RegExp(",,", "g"), ","); |
| | | } |
| | | if (str.includes(",,")) { |
| | | str = str.replace(new RegExp(",,", "g"), ","); |
| | | } |
| | | if (str.includes(",,")) { |
| | | str = str.replace(new RegExp(",,", "g"), ","); |
| | | } |
| | | if (str.includes(",,")) { |
| | | str = str.replace(new RegExp(",,", "g"), ","); |
| | | } |
| | | if (str.includes('&"/"&')) { |
| | | // 计ç®å¸¦ææ ç |
| | | return str |
| | | .replace(new RegExp('&"/"&', "g"), "/") |
| | | .replace(new RegExp("//", "g"), ""); |
| | | } else if (isPoint) { |
| | | // 计ç®å¸¦å°æ°ç¹ç |
| | | return str.replace("ABS", "").replace(/\(|\)/g, ""); |
| | | } else { |
| | | if (str.includes("IF")) { |
| | | str = str.replace("IF", "").replace(/\(|\)/g, ""); |
| | | const str1 = str.split(","); |
| | | if (str1[0] === " " || str1[0] === "") { |
| | | str1[0] = 0; |
| | | } |
| | | if (str1[2] === " " || str1[2] === "") { |
| | | str1[2] = 0; |
| | | } |
| | | const str2 = str1.join(","); |
| | | str = "IF(" + str2 + ")"; |
| | | } |
| | | // console.log('str---', str) |
| | | if (str.includes("æè£") || str.includes("èå")) { |
| | | const result = str.replace(/[^\u4e00-\u9fa5]/g, ""); |
| | | if (result.includes("æè£") && !result.includes("èå")) { |
| | | return "æè£"; |
| | | } else if (!result.includes("æè£") && result.includes("èå")) { |
| | | return "èå"; |
| | | } else if (result.includes("æè£") && result.includes("èå")) { |
| | | return "æè£èå"; |
| | | } |
| | | } |
| | | // 计ç®å¸¸è§ç |
| | | return eval(str); |
| | | } |
| | | } catch (error) { |
| | | console.log("error", error); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | * big.js v5.2.2 |
| | | * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic. |
| | | * Copyright (c) 2018 Michael Mclaughlin <M8ch88l@gmail.com> |
| | | * https://github.com/MikeMcl/big.js/LICENCE |
| | | */ |
| | | (function (GLOBAL) { |
| | | "use strict"; |
| | | var Big, |
| | | /************************************** EDITABLE DEFAULTS *****************************************/ |
| | | |
| | | // The default values below must be integers within the stated ranges. |
| | | |
| | | /* |
| | | * The maximum number of decimal places (DP) of the results of operations involving division: |
| | | * div and sqrt, and pow with negative exponents. |
| | | */ |
| | | DP = 20, // 0 to MAX_DP |
| | | /* |
| | | * The rounding mode (RM) used when rounding to the above decimal places. |
| | | * |
| | | * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN) |
| | | * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP) |
| | | * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN) |
| | | * 3 Away from zero. (ROUND_UP) |
| | | */ |
| | | RM = 1, // 0, 1, 2 or 3 |
| | | // The maximum value of DP and Big.DP. |
| | | MAX_DP = 1e6, // 0 to 1000000 |
| | | // The maximum magnitude of the exponent argument to the pow method. |
| | | MAX_POWER = 1e6, // 1 to 1000000 |
| | | /* |
| | | * The negative exponent (NE) at and beneath which toString returns exponential notation. |
| | | * (JavaScript numbers: -7) |
| | | * -1000000 is the minimum recommended exponent value of a Big. |
| | | */ |
| | | NE = -7, // 0 to -1000000 |
| | | /* |
| | | * The positive exponent (PE) at and above which toString returns exponential notation. |
| | | * (JavaScript numbers: 21) |
| | | * 1000000 is the maximum recommended exponent value of a Big. |
| | | * (This limit is not enforced or checked.) |
| | | */ |
| | | PE = 21, // 0 to 1000000 |
| | | /**************************************************************************************************/ |
| | | |
| | | // Error messages. |
| | | NAME = "[big.js] ", |
| | | INVALID = NAME + "Invalid ", |
| | | INVALID_DP = INVALID + "decimal places", |
| | | INVALID_RM = INVALID + "rounding mode", |
| | | DIV_BY_ZERO = NAME + "Division by zero", |
| | | // The shared prototype object. |
| | | P = {}, |
| | | UNDEFINED = void 0, |
| | | NUMERIC = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i; |
| | | |
| | | /* |
| | | * Create and return a Big constructor. |
| | | * |
| | | */ |
| | | function _Big_() { |
| | | /* |
| | | * The Big constructor and exported function. |
| | | * Create and return a new instance of a Big number object. |
| | | * |
| | | * n {number|string|Big} A numeric value. |
| | | */ |
| | | function Big(n) { |
| | | var x = this; |
| | | |
| | | // Enable constructor usage without new. |
| | | if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n); |
| | | |
| | | // Duplicate. |
| | | if (n instanceof Big) { |
| | | x.s = n.s; |
| | | x.e = n.e; |
| | | x.c = n.c.slice(); |
| | | } else { |
| | | parse(x, n); |
| | | } |
| | | |
| | | /* |
| | | * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which |
| | | * points to Object. |
| | | */ |
| | | x.constructor = Big; |
| | | } |
| | | |
| | | Big.prototype = P; |
| | | Big.DP = DP; |
| | | Big.RM = RM; |
| | | Big.NE = NE; |
| | | Big.PE = PE; |
| | | Big.version = "5.2.2"; |
| | | |
| | | return Big; |
| | | } |
| | | |
| | | /* |
| | | * Parse the number or string value passed to a Big constructor. |
| | | * |
| | | * x {Big} A Big number instance. |
| | | * n {number|string} A numeric value. |
| | | */ |
| | | function parse(x, n) { |
| | | var e, i, nl; |
| | | |
| | | // Minus zero? |
| | | if (n === 0 && 1 / n < 0) n = "-0"; |
| | | else if (!NUMERIC.test((n += ""))) throw Error(INVALID + "number"); |
| | | |
| | | // Determine sign. |
| | | x.s = n.charAt(0) == "-" ? ((n = n.slice(1)), -1) : 1; |
| | | |
| | | // Decimal point? |
| | | if ((e = n.indexOf(".")) > -1) n = n.replace(".", ""); |
| | | |
| | | // Exponential form? |
| | | if ((i = n.search(/e/i)) > 0) { |
| | | // Determine exponent. |
| | | if (e < 0) e = i; |
| | | e += +n.slice(i + 1); |
| | | n = n.substring(0, i); |
| | | } else if (e < 0) { |
| | | // Integer. |
| | | e = n.length; |
| | | } |
| | | |
| | | nl = n.length; |
| | | |
| | | // Determine leading zeros. |
| | | for (i = 0; i < nl && n.charAt(i) == "0"; ) ++i; |
| | | |
| | | if (i == nl) { |
| | | // Zero. |
| | | x.c = [(x.e = 0)]; |
| | | } else { |
| | | // Determine trailing zeros. |
| | | for (; nl > 0 && n.charAt(--nl) == "0"; ); |
| | | x.e = e - i - 1; |
| | | x.c = []; |
| | | |
| | | // Convert string to array of digits without leading/trailing zeros. |
| | | for (e = 0; i <= nl; ) x.c[e++] = +n.charAt(i++); |
| | | } |
| | | |
| | | return x; |
| | | } |
| | | |
| | | /* |
| | | * Round Big x to a maximum of dp decimal places using rounding mode rm. |
| | | * Called by stringify, P.div, P.round and P.sqrt. |
| | | * |
| | | * x {Big} The Big to round. |
| | | * dp {number} Integer, 0 to MAX_DP inclusive. |
| | | * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP) |
| | | * [more] {boolean} Whether the result of division was truncated. |
| | | */ |
| | | function round(x, dp, rm, more) { |
| | | var xc = x.c, |
| | | i = x.e + dp + 1; |
| | | |
| | | if (i < xc.length) { |
| | | if (rm === 1) { |
| | | // xc[i] is the digit after the digit that may be rounded up. |
| | | more = xc[i] >= 5; |
| | | } else if (rm === 2) { |
| | | more = |
| | | xc[i] > 5 || |
| | | (xc[i] == 5 && |
| | | (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1)); |
| | | } else if (rm === 3) { |
| | | more = more || !!xc[0]; |
| | | } else { |
| | | more = false; |
| | | if (rm !== 0) throw Error(INVALID_RM); |
| | | } |
| | | |
| | | if (i < 1) { |
| | | xc.length = 1; |
| | | |
| | | if (more) { |
| | | // 1, 0.1, 0.01, 0.001, 0.0001 etc. |
| | | x.e = -dp; |
| | | xc[0] = 1; |
| | | } else { |
| | | // Zero. |
| | | xc[0] = x.e = 0; |
| | | } |
| | | } else { |
| | | // Remove any digits after the required decimal places. |
| | | xc.length = i--; |
| | | |
| | | // Round up? |
| | | if (more) { |
| | | // Rounding up may mean the previous digit has to be rounded up. |
| | | for (; ++xc[i] > 9; ) { |
| | | xc[i] = 0; |
| | | if (!i--) { |
| | | ++x.e; |
| | | xc.unshift(1); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // Remove trailing zeros. |
| | | for (i = xc.length; !xc[--i]; ) xc.pop(); |
| | | } |
| | | } else if (rm < 0 || rm > 3 || rm !== ~~rm) { |
| | | throw Error(INVALID_RM); |
| | | } |
| | | |
| | | return x; |
| | | } |
| | | |
| | | /* |
| | | * Return a string representing the value of Big x in normal or exponential notation. |
| | | * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf. |
| | | * |
| | | * x {Big} |
| | | * id? {number} Caller id. |
| | | * 1 toExponential |
| | | * 2 toFixed |
| | | * 3 toPrecision |
| | | * 4 valueOf |
| | | * n? {number|undefined} Caller's argument. |
| | | * k? {number|undefined} |
| | | */ |
| | | function stringify(x, id, n, k) { |
| | | var e, |
| | | s, |
| | | Big = x.constructor, |
| | | z = !x.c[0]; |
| | | |
| | | if (n !== UNDEFINED) { |
| | | if (n !== ~~n || n < (id == 3) || n > MAX_DP) { |
| | | throw Error(id == 3 ? INVALID + "precision" : INVALID_DP); |
| | | } |
| | | |
| | | x = new Big(x); |
| | | |
| | | // The index of the digit that may be rounded up. |
| | | n = k - x.e; |
| | | |
| | | // Round? |
| | | if (x.c.length > ++k) round(x, n, Big.RM); |
| | | |
| | | // toFixed: recalculate k as x.e may have changed if value rounded up. |
| | | if (id == 2) k = x.e + n + 1; |
| | | |
| | | // Append zeros? |
| | | for (; x.c.length < k; ) x.c.push(0); |
| | | } |
| | | |
| | | e = x.e; |
| | | s = x.c.join(""); |
| | | n = s.length; |
| | | |
| | | // Exponential notation? |
| | | if ( |
| | | id != 2 && |
| | | (id == 1 || (id == 3 && k <= e) || e <= Big.NE || e >= Big.PE) |
| | | ) { |
| | | s = |
| | | s.charAt(0) + |
| | | (n > 1 ? "." + s.slice(1) : "") + |
| | | (e < 0 ? "e" : "e+") + |
| | | e; |
| | | |
| | | // Normal notation. |
| | | } else if (e < 0) { |
| | | for (; ++e; ) s = "0" + s; |
| | | s = "0." + s; |
| | | } else if (e > 0) { |
| | | if (++e > n) for (e -= n; e--; ) s += "0"; |
| | | else if (e < n) s = s.slice(0, e) + "." + s.slice(e); |
| | | } else if (n > 1) { |
| | | s = s.charAt(0) + "." + s.slice(1); |
| | | } |
| | | |
| | | return x.s < 0 && (!z || id == 4) ? "-" + s : s; |
| | | } |
| | | |
| | | // Prototype/instance methods |
| | | |
| | | /* |
| | | * Return a new Big whose value is the absolute value of this Big. |
| | | */ |
| | | P.abs = function () { |
| | | var x = new this.constructor(this); |
| | | x.s = 1; |
| | | return x; |
| | | }; |
| | | |
| | | /* |
| | | * Return 1 if the value of this Big is greater than the value of Big y, |
| | | * -1 if the value of this Big is less than the value of Big y, or |
| | | * 0 if they have the same value. |
| | | */ |
| | | P.cmp = function (y) { |
| | | var isneg, |
| | | x = this, |
| | | xc = x.c, |
| | | yc = (y = new x.constructor(y)).c, |
| | | i = x.s, |
| | | j = y.s, |
| | | k = x.e, |
| | | l = y.e; |
| | | |
| | | // Either zero? |
| | | if (!xc[0] || !yc[0]) return !xc[0] ? (!yc[0] ? 0 : -j) : i; |
| | | |
| | | // Signs differ? |
| | | if (i != j) return i; |
| | | |
| | | isneg = i < 0; |
| | | |
| | | // Compare exponents. |
| | | if (k != l) return (k > l) ^ isneg ? 1 : -1; |
| | | |
| | | j = (k = xc.length) < (l = yc.length) ? k : l; |
| | | |
| | | // Compare digit by digit. |
| | | for (i = -1; ++i < j; ) { |
| | | if (xc[i] != yc[i]) return (xc[i] > yc[i]) ^ isneg ? 1 : -1; |
| | | } |
| | | |
| | | // Compare lengths. |
| | | return k == l ? 0 : (k > l) ^ isneg ? 1 : -1; |
| | | }; |
| | | |
| | | /* |
| | | * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded, |
| | | * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM. |
| | | */ |
| | | P.div = function (y) { |
| | | var x = this, |
| | | Big = x.constructor, |
| | | a = x.c, // dividend |
| | | b = (y = new Big(y)).c, // divisor |
| | | k = x.s == y.s ? 1 : -1, |
| | | dp = Big.DP; |
| | | |
| | | if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(INVALID_DP); |
| | | |
| | | // Divisor is zero? |
| | | if (!b[0]) throw Error(DIV_BY_ZERO); |
| | | |
| | | // Dividend is 0? Return +-0. |
| | | if (!a[0]) return new Big(k * 0); |
| | | |
| | | var bl, |
| | | bt, |
| | | n, |
| | | cmp, |
| | | ri, |
| | | bz = b.slice(), |
| | | ai = (bl = b.length), |
| | | al = a.length, |
| | | r = a.slice(0, bl), // remainder |
| | | rl = r.length, |
| | | q = y, // quotient |
| | | qc = (q.c = []), |
| | | qi = 0, |
| | | d = dp + (q.e = x.e - y.e) + 1; // number of digits of the result |
| | | |
| | | q.s = k; |
| | | k = d < 0 ? 0 : d; |
| | | |
| | | // Create version of divisor with leading zero. |
| | | bz.unshift(0); |
| | | |
| | | // Add zeros to make remainder as long as divisor. |
| | | for (; rl++ < bl; ) r.push(0); |
| | | |
| | | do { |
| | | // n is how many times the divisor goes into current remainder. |
| | | for (n = 0; n < 10; n++) { |
| | | // Compare divisor and remainder. |
| | | if (bl != (rl = r.length)) { |
| | | cmp = bl > rl ? 1 : -1; |
| | | } else { |
| | | for (ri = -1, cmp = 0; ++ri < bl; ) { |
| | | if (b[ri] != r[ri]) { |
| | | cmp = b[ri] > r[ri] ? 1 : -1; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // If divisor < remainder, subtract divisor from remainder. |
| | | if (cmp < 0) { |
| | | // Remainder can't be more than 1 digit longer than divisor. |
| | | // Equalise lengths using divisor with extra leading zero? |
| | | for (bt = rl == bl ? b : bz; rl; ) { |
| | | if (r[--rl] < bt[rl]) { |
| | | ri = rl; |
| | | for (; ri && !r[--ri]; ) r[ri] = 9; |
| | | --r[ri]; |
| | | r[rl] += 10; |
| | | } |
| | | r[rl] -= bt[rl]; |
| | | } |
| | | |
| | | for (; !r[0]; ) r.shift(); |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // Add the digit n to the result array. |
| | | qc[qi++] = cmp ? n : ++n; |
| | | |
| | | // Update the remainder. |
| | | if (r[0] && cmp) r[rl] = a[ai] || 0; |
| | | else r = [a[ai]]; |
| | | } while ((ai++ < al || r[0] !== UNDEFINED) && k--); |
| | | |
| | | // Leading zero? Do not remove if result is simply zero (qi == 1). |
| | | if (!qc[0] && qi != 1) { |
| | | // There can't be more than one zero. |
| | | qc.shift(); |
| | | q.e--; |
| | | } |
| | | |
| | | // Round? |
| | | if (qi > d) round(q, dp, Big.RM, r[0] !== UNDEFINED); |
| | | |
| | | return q; |
| | | }; |
| | | |
| | | /* |
| | | * Return true if the value of this Big is equal to the value of Big y, otherwise return false. |
| | | */ |
| | | P.eq = function (y) { |
| | | return !this.cmp(y); |
| | | }; |
| | | |
| | | /* |
| | | * Return true if the value of this Big is greater than the value of Big y, otherwise return |
| | | * false. |
| | | */ |
| | | P.gt = function (y) { |
| | | return this.cmp(y) > 0; |
| | | }; |
| | | |
| | | /* |
| | | * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise |
| | | * return false. |
| | | */ |
| | | P.gte = function (y) { |
| | | return this.cmp(y) > -1; |
| | | }; |
| | | |
| | | /* |
| | | * Return true if the value of this Big is less than the value of Big y, otherwise return false. |
| | | */ |
| | | P.lt = function (y) { |
| | | return this.cmp(y) < 0; |
| | | }; |
| | | |
| | | /* |
| | | * Return true if the value of this Big is less than or equal to the value of Big y, otherwise |
| | | * return false. |
| | | */ |
| | | P.lte = function (y) { |
| | | return this.cmp(y) < 1; |
| | | }; |
| | | |
| | | /* |
| | | * Return a new Big whose value is the value of this Big minus the value of Big y. |
| | | */ |
| | | P.minus = P.sub = function (y) { |
| | | var i, |
| | | j, |
| | | t, |
| | | xlty, |
| | | x = this, |
| | | Big = x.constructor, |
| | | a = x.s, |
| | | b = (y = new Big(y)).s; |
| | | |
| | | // Signs differ? |
| | | if (a != b) { |
| | | y.s = -b; |
| | | return x.plus(y); |
| | | } |
| | | |
| | | var xc = x.c.slice(), |
| | | xe = x.e, |
| | | yc = y.c, |
| | | ye = y.e; |
| | | |
| | | // Either zero? |
| | | if (!xc[0] || !yc[0]) { |
| | | // y is non-zero? x is non-zero? Or both are zero. |
| | | return yc[0] ? ((y.s = -b), y) : new Big(xc[0] ? x : 0); |
| | | } |
| | | |
| | | // Determine which is the bigger number. Prepend zeros to equalise exponents. |
| | | if ((a = xe - ye)) { |
| | | if ((xlty = a < 0)) { |
| | | a = -a; |
| | | t = xc; |
| | | } else { |
| | | ye = xe; |
| | | t = yc; |
| | | } |
| | | |
| | | t.reverse(); |
| | | for (b = a; b--; ) t.push(0); |
| | | t.reverse(); |
| | | } else { |
| | | // Exponents equal. Check digit by digit. |
| | | j = ((xlty = xc.length < yc.length) ? xc : yc).length; |
| | | |
| | | for (a = b = 0; b < j; b++) { |
| | | if (xc[b] != yc[b]) { |
| | | xlty = xc[b] < yc[b]; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // x < y? Point xc to the array of the bigger number. |
| | | if (xlty) { |
| | | t = xc; |
| | | xc = yc; |
| | | yc = t; |
| | | y.s = -y.s; |
| | | } |
| | | |
| | | /* |
| | | * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only |
| | | * needs to start at yc.length. |
| | | */ |
| | | if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--; ) xc[i++] = 0; |
| | | |
| | | // Subtract yc from xc. |
| | | for (b = i; j > a; ) { |
| | | if (xc[--j] < yc[j]) { |
| | | for (i = j; i && !xc[--i]; ) xc[i] = 9; |
| | | --xc[i]; |
| | | xc[j] += 10; |
| | | } |
| | | |
| | | xc[j] -= yc[j]; |
| | | } |
| | | |
| | | // Remove trailing zeros. |
| | | for (; xc[--b] === 0; ) xc.pop(); |
| | | |
| | | // Remove leading zeros and adjust exponent accordingly. |
| | | for (; xc[0] === 0; ) { |
| | | xc.shift(); |
| | | --ye; |
| | | } |
| | | |
| | | if (!xc[0]) { |
| | | // n - n = +0 |
| | | y.s = 1; |
| | | |
| | | // Result must be zero. |
| | | xc = [(ye = 0)]; |
| | | } |
| | | |
| | | y.c = xc; |
| | | y.e = ye; |
| | | |
| | | return y; |
| | | }; |
| | | |
| | | /* |
| | | * Return a new Big whose value is the value of this Big modulo the value of Big y. |
| | | */ |
| | | P.mod = function (y) { |
| | | var ygtx, |
| | | x = this, |
| | | Big = x.constructor, |
| | | a = x.s, |
| | | b = (y = new Big(y)).s; |
| | | |
| | | if (!y.c[0]) throw Error(DIV_BY_ZERO); |
| | | |
| | | x.s = y.s = 1; |
| | | ygtx = y.cmp(x) == 1; |
| | | x.s = a; |
| | | y.s = b; |
| | | |
| | | if (ygtx) return new Big(x); |
| | | |
| | | a = Big.DP; |
| | | b = Big.RM; |
| | | Big.DP = Big.RM = 0; |
| | | x = x.div(y); |
| | | Big.DP = a; |
| | | Big.RM = b; |
| | | |
| | | return this.minus(x.times(y)); |
| | | }; |
| | | |
| | | /* |
| | | * Return a new Big whose value is the value of this Big plus the value of Big y. |
| | | */ |
| | | P.plus = P.add = function (y) { |
| | | var t, |
| | | x = this, |
| | | Big = x.constructor, |
| | | a = x.s, |
| | | b = (y = new Big(y)).s; |
| | | |
| | | // Signs differ? |
| | | if (a != b) { |
| | | y.s = -b; |
| | | return x.minus(y); |
| | | } |
| | | |
| | | var xe = x.e, |
| | | xc = x.c, |
| | | ye = y.e, |
| | | yc = y.c; |
| | | |
| | | // Either zero? y is non-zero? x is non-zero? Or both are zero. |
| | | if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0); |
| | | |
| | | xc = xc.slice(); |
| | | |
| | | // Prepend zeros to equalise exponents. |
| | | // Note: reverse faster than unshifts. |
| | | if ((a = xe - ye)) { |
| | | if (a > 0) { |
| | | ye = xe; |
| | | t = yc; |
| | | } else { |
| | | a = -a; |
| | | t = xc; |
| | | } |
| | | |
| | | t.reverse(); |
| | | for (; a--; ) t.push(0); |
| | | t.reverse(); |
| | | } |
| | | |
| | | // Point xc to the longer array. |
| | | if (xc.length - yc.length < 0) { |
| | | t = yc; |
| | | yc = xc; |
| | | xc = t; |
| | | } |
| | | |
| | | a = yc.length; |
| | | |
| | | // Only start adding at yc.length - 1 as the further digits of xc can be left as they are. |
| | | for (b = 0; a; xc[a] %= 10) b = ((xc[--a] = xc[a] + yc[a] + b) / 10) | 0; |
| | | |
| | | // No need to check for zero, as +x + +y != 0 && -x + -y != 0 |
| | | |
| | | if (b) { |
| | | xc.unshift(b); |
| | | ++ye; |
| | | } |
| | | |
| | | // Remove trailing zeros. |
| | | for (a = xc.length; xc[--a] === 0; ) xc.pop(); |
| | | |
| | | y.c = xc; |
| | | y.e = ye; |
| | | |
| | | return y; |
| | | }; |
| | | |
| | | /* |
| | | * Return a Big whose value is the value of this Big raised to the power n. |
| | | * If n is negative, round to a maximum of Big.DP decimal places using rounding |
| | | * mode Big.RM. |
| | | * |
| | | * n {number} Integer, -MAX_POWER to MAX_POWER inclusive. |
| | | */ |
| | | P.pow = function (n) { |
| | | var x = this, |
| | | one = new x.constructor(1), |
| | | y = one, |
| | | isneg = n < 0; |
| | | |
| | | if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) |
| | | throw Error(INVALID + "exponent"); |
| | | if (isneg) n = -n; |
| | | |
| | | for (;;) { |
| | | if (n & 1) y = y.times(x); |
| | | n >>= 1; |
| | | if (!n) break; |
| | | x = x.times(x); |
| | | } |
| | | |
| | | return isneg ? one.div(y) : y; |
| | | }; |
| | | |
| | | /* |
| | | * Return a new Big whose value is the value of this Big rounded using rounding mode rm |
| | | * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a |
| | | * multiple of 10**-dp. |
| | | * If dp is not specified, round to 0 decimal places. |
| | | * If rm is not specified, use Big.RM. |
| | | * |
| | | * dp? {number} Integer, -MAX_DP to MAX_DP inclusive. |
| | | * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP) |
| | | */ |
| | | P.round = function (dp, rm) { |
| | | var Big = this.constructor; |
| | | if (dp === UNDEFINED) dp = 0; |
| | | else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) |
| | | throw Error(INVALID_DP); |
| | | return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm); |
| | | }; |
| | | |
| | | /* |
| | | * Return a new Big whose value is the square root of the value of this Big, rounded, if |
| | | * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM. |
| | | */ |
| | | P.sqrt = function () { |
| | | var r, |
| | | c, |
| | | t, |
| | | x = this, |
| | | Big = x.constructor, |
| | | s = x.s, |
| | | e = x.e, |
| | | half = new Big(0.5); |
| | | |
| | | // Zero? |
| | | if (!x.c[0]) return new Big(x); |
| | | |
| | | // Negative? |
| | | if (s < 0) throw Error(NAME + "No square root"); |
| | | |
| | | // Estimate. |
| | | s = Math.sqrt(x + ""); |
| | | |
| | | // Math.sqrt underflow/overflow? |
| | | // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent. |
| | | if (s === 0 || s === 1 / 0) { |
| | | c = x.c.join(""); |
| | | if (!((c.length + e) & 1)) c += "0"; |
| | | s = Math.sqrt(c); |
| | | e = (((e + 1) / 2) | 0) - (e < 0 || e & 1); |
| | | r = new Big( |
| | | (s == 1 / 0 |
| | | ? "1e" |
| | | : (s = s.toExponential()).slice(0, s.indexOf("e") + 1)) + e |
| | | ); |
| | | } else { |
| | | r = new Big(s); |
| | | } |
| | | |
| | | e = r.e + (Big.DP += 4); |
| | | |
| | | // Newton-Raphson iteration. |
| | | do { |
| | | t = r; |
| | | r = half.times(t.plus(x.div(t))); |
| | | } while (t.c.slice(0, e).join("") !== r.c.slice(0, e).join("")); |
| | | |
| | | return round(r, (Big.DP -= 4), Big.RM); |
| | | }; |
| | | |
| | | /* |
| | | * Return a new Big whose value is the value of this Big times the value of Big y. |
| | | */ |
| | | P.times = P.mul = function (y) { |
| | | var c, |
| | | x = this, |
| | | Big = x.constructor, |
| | | xc = x.c, |
| | | yc = (y = new Big(y)).c, |
| | | a = xc.length, |
| | | b = yc.length, |
| | | i = x.e, |
| | | j = y.e; |
| | | |
| | | // Determine sign of result. |
| | | y.s = x.s == y.s ? 1 : -1; |
| | | |
| | | // Return signed 0 if either 0. |
| | | if (!xc[0] || !yc[0]) return new Big(y.s * 0); |
| | | |
| | | // Initialise exponent of result as x.e + y.e. |
| | | y.e = i + j; |
| | | |
| | | // If array xc has fewer digits than yc, swap xc and yc, and lengths. |
| | | if (a < b) { |
| | | c = xc; |
| | | xc = yc; |
| | | yc = c; |
| | | j = a; |
| | | a = b; |
| | | b = j; |
| | | } |
| | | |
| | | // Initialise coefficient array of result with zeros. |
| | | for (c = new Array((j = a + b)); j--; ) c[j] = 0; |
| | | |
| | | // Multiply. |
| | | |
| | | // i is initially xc.length. |
| | | for (i = b; i--; ) { |
| | | b = 0; |
| | | |
| | | // a is yc.length. |
| | | for (j = a + i; j > i; ) { |
| | | // Current sum of products at this digit position, plus carry. |
| | | b = c[j] + yc[i] * xc[j - i - 1] + b; |
| | | c[j--] = b % 10; |
| | | |
| | | // carry |
| | | b = (b / 10) | 0; |
| | | } |
| | | |
| | | c[j] = (c[j] + b) % 10; |
| | | } |
| | | |
| | | // Increment result exponent if there is a final carry, otherwise remove leading zero. |
| | | if (b) ++y.e; |
| | | else c.shift(); |
| | | |
| | | // Remove trailing zeros. |
| | | for (i = c.length; !c[--i]; ) c.pop(); |
| | | y.c = c; |
| | | |
| | | return y; |
| | | }; |
| | | |
| | | /* |
| | | * Return a string representing the value of this Big in exponential notation to dp fixed decimal |
| | | * places and rounded using Big.RM. |
| | | * |
| | | * dp? {number} Integer, 0 to MAX_DP inclusive. |
| | | */ |
| | | P.toExponential = function (dp) { |
| | | return stringify(this, 1, dp, dp); |
| | | }; |
| | | |
| | | /* |
| | | * Return a string representing the value of this Big in normal notation to dp fixed decimal |
| | | * places and rounded using Big.RM. |
| | | * |
| | | * dp? {number} Integer, 0 to MAX_DP inclusive. |
| | | * |
| | | * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'. |
| | | * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'. |
| | | */ |
| | | P.toFixed = function (dp) { |
| | | return stringify(this, 2, dp, this.e + dp); |
| | | }; |
| | | |
| | | /* |
| | | * Return a string representing the value of this Big rounded to sd significant digits using |
| | | * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent |
| | | * the integer part of the value in normal notation. |
| | | * |
| | | * sd {number} Integer, 1 to MAX_DP inclusive. |
| | | */ |
| | | P.toPrecision = function (sd) { |
| | | return stringify(this, 3, sd, sd - 1); |
| | | }; |
| | | |
| | | /* |
| | | * Return a string representing the value of this Big. |
| | | * Return exponential notation if this Big has a positive exponent equal to or greater than |
| | | * Big.PE, or a negative exponent equal to or less than Big.NE. |
| | | * Omit the sign for negative zero. |
| | | */ |
| | | P.toString = function () { |
| | | return stringify(this); |
| | | }; |
| | | |
| | | /* |
| | | * Return a string representing the value of this Big. |
| | | * Return exponential notation if this Big has a positive exponent equal to or greater than |
| | | * Big.PE, or a negative exponent equal to or less than Big.NE. |
| | | * Include the sign for negative zero. |
| | | */ |
| | | P.valueOf = P.toJSON = function () { |
| | | return stringify(this, 4); |
| | | }; |
| | | |
| | | // Export |
| | | |
| | | Big = _Big_(); |
| | | |
| | | Big["default"] = Big.Big = Big; |
| | | |
| | | //AMD. |
| | | if (typeof define === "function" && define.amd) { |
| | | define(function () { |
| | | return Big; |
| | | }); |
| | | |
| | | // Node and other CommonJS-like environments that support module.exports. |
| | | } else if (typeof module !== "undefined" && module.exports) { |
| | | module.exports = Big; |
| | | |
| | | //Browser. |
| | | } else { |
| | | GLOBAL.Big = Big; |
| | | } |
| | | })(this); |