2014-06-26 59 views
0

我想創建一個相當簡單的表單,它將允許輸入變量並解決給定的公式。我在如何表達公式以及如何將前兩個變量理解爲指數方面磕磕絆絆。使用Javascript快速/解決公式

下面是完整的公式,在Excel中(細胞的標籤替換爲HTML的輸入名字)工作原理:

=varNk * varQr * (273 + varT)/(273 + varTo) * varPp/varP * varKq * varKak 

注意,「varNk」和「varQr」與指數輸入的值 - 即97.53^12

編輯:實際公式(鏈接到圖像,因爲我沒有足夠的代表直接發佈) - http://mattk.net/DwFormula1.PNG

這是我試圖做的工作。我不確定組裝最終輸出的正確方法,但理想情況下我想弄清楚如何使它成爲單個按鈕操作。

<head> 
    <script> 
     function doCalcOne() 
     { 
     var varNk = document.getElementById('varNk').value;  
     var varQr = document.getElementById('varQr').value; 
     var varT = document.getElementById('varT').value; 
     var varTo = document.getElementById('varTo').value; 
     var varPo = document.getElementById('varPo').value; 
     var varP = document.getElementById('varP').value; 
     var varKq = document.getElementById('varKq').value; 
     var varKak = document.getElementById('varKak').value; 

     var result1 = document.getElementById('stepOne'); 
     var stepOne = varNk * varQr; 
     result1.value = stepOne; 

     } 
     function doCalcTwo() 
     { 
     var result2 = document.getElementById('stepTwo'); 
     var stepTwo = parseInt(varT.value) + 273; 
     result2.value = stepTwo; 
     } 
    </script> 
</head> 
<html> 
    <table> 
     <tr> 
     <td>Step One:<input id="stepOne" /></td> 
     </tr> 
     <tr> 
     <td>Step Two:<input id="stepTwo" /></td> 
     </tr> 
    </table> 
    <div id="DoseRateCalc"> 
     <p>Enter the values below to calculate the Dose Rate</p> 
    </div> 
    <table style="width:600px;border:1px solid #000;"> 
     <tr> 
     <td> 
      <p>Nk=<input id="varNk" type="text"></p> 
     </td> 
     <td> 
      <p>TN 34013 IC Cal Certificate Detection Calibration Factor</p> 
     </td> 
     <tr> 
     <td> 
      <p>Qr=<input id="varQr" type="text"></p> 
     </td> 
     <td> 
      <p>Unidos measured charge in pC (pico coulumb)@20mm</p> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <p>T=<input id="varT" type="text"></p> 
     </td> 
     <td> 
      <P>Current temperature</p> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <p>To=<input id="varTo" type="text"></p> 
     </td> 
     <td> 
      <p>TN34013 IC cal certificate protocol temp</p> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <p>Po=<input id="varPo" type="text"></p> 
     </td> 
     <td> 
      <p>Current pressure</p> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <p>P=<input id="varP" type="text"></p> 
     </td> 
     <td> 
      <p>TN34013 IC cal certificate protocol pressure</p> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <p>Kq=<input id="varKq" type="text"></p> 
     </td> 
     <td> 
      <p>TN34013 IC cal certificate protocol TW30 Beam Quality Correction value</p> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <p>Kak->DW=<input id="varKak" type="text"> 
     </td> 
     <td> 
      <p>Correction factor TN 34013 IC from PTW. Air Kerma --> absorbed dose to water convertion for TW30 Water Phantom Manual pg43</p> 
     </td> 
     </tr> 
     </p> 
     <p><input type="button" value="Calculate Step 1" onClick="doCalcOne()"></p> 
     <p><input type="button" value="Calculate Step 2" onClick="doCalcTwo()"></p> 
    </table> 
    <br>  
</html> 

編輯2: 工作職能:

function doCalcOne() 
{ 
    var varNk = document.getElementById('varNk').value;  
    var varQr = document.getElementById('varQr').value; 
    var varT = document.getElementById('varT').value; 
    var varTo = document.getElementById('varTo').value; 
    var varPo = document.getElementById('varPo').value; 
    var varP = document.getElementById('varP').value; 
    var varKq = document.getElementById('varKq').value; 
    var varKak = document.getElementById('varKak').value; 

    var result1 = document.getElementById('stepOne'); 
    var stepOne = varNk * (Math.pow(10,9)) * varQr * (Math.pow(10,-12)) * (273 + varT)/(273 + varTo) * varPo/varP * varKq * varKak; 

    num = stepOne; 
    result1.value = num.toPrecision(4); 
} 

回答

0

呼叫在doCalcOne年底doCalcTwo功能,以及任何你需要的變量傳遞,你應該得到你所期望的!你也可以使用第二個按鈕。這裏的更新代碼:

更新:我做了所有功能,並添加了我認爲是正確的數學。我不知道你實際計算的是什麼,但Excel風格的數學可以幾乎一對一地轉換成JavaScript。操作順序取決於您!

function doCalcOne() 
{ 
    var varNk = document.getElementById('varNk').value;  
    var varQr = document.getElementById('varQr').value; 
    var varT = document.getElementById('varT').value; 
    var varTo = document.getElementById('varTo').value; 
    var varPo = document.getElementById('varPo').value; 
    var varP = document.getElementById('varP').value; 
    var varKq = document.getElementById('varKq').value; 
    var varKak = document.getElementById('varKak').value; 

    var result1 = document.getElementById('stepOne'); 
    var stepOne = varNk * varQr * (273 + varT)/(273 + varTo) * varPp/varP * varKq * varKak; 

    result1.value = stepOne; 
} 

老實說,你不需要兩個函數,但我認爲你有/有理由把它分解。只要知道你可以將這些功能組合成一個,它就可以工作。

我想說的另一點是,你在一個函數內創建的變量將不能用於不同的函數。這稱爲「範圍」,通過查看開/關大括號({ and })可輕鬆確定。格式不正確的代碼使得難以跟蹤;)。

+0

哇,我真的很感謝你的快速反應和時間來解決這個混亂!對於如何在一個功能下創建這一切,我仍然有點失落?我的最終值需要代表 '= varNk * varQr *(273 + varT)/(273 + varTo)* varPp/varP * varKq * varKak' 以及如何使前兩個變量接受格式23^12(純粹是一個例子)。我很抱歉沒有馬上理解這一點。 – mkrueger

+0

沒問題,在JavaScript中使用[pow](http://www.w3schools.com/jsref/jsref_pow.asp)函數做指數。如果你需要將基數和指數作爲變量,你必須解析文本「23^12」(困難,但並不那麼難),或者只提供兩個輸入框,一個用於底部,另一個用於輸入指數。 –

+0

另外,我認爲數學原本是錯誤的,那是你的問題!我會更新我的答案! –