2016-04-11 44 views
0

我的計算器的非腳本部分是(與所有的輸入):我想在HTML Javascript中製作一個分數計算器,我需要簡化一小部分,我該怎麼做?

<body> 
    <p class="box">Fraction Calculator</p> 
    <input type="number" id="n1"> 
    <select id="operation"> 
     <option value="1">X</option> 
     <option value="2">/</option> 
     <option value="3">+</option> 
     <option value="4">-</option> 
    </select> 
    <input type="number" id="n2"> 
    <br> 
    <input type="number" id="n3"> 
    <input type="number" id="n4" style="margin-left:37px"> 
    <br> 
    <button style="margin-left:130px"; onClick="document.getElementById('fraction').innerHTML = option()">Go!</button> 
    <p id="fraction"></p> 
</body> 

我的選項功能是這樣的:

function option() 
{ 
selection = document.getElementById('operation').value; 


if(selection == "1"){ 

a = multiply(); 
return a 
} 
else if(selection == "2"){ 
b = division(); 
return b 
} 
else if(selection == "3"){ 
c = addition(); 
return c 
} 
else{ 
d = subtraction(); 
return d 
} 
} 

所以我現在對我的乘法部分FO我的計算器代碼是這樣的:

function multiply() 
{ 
Number1 = parseInt(document.getElementById("n1").value); 
Number2 = parseInt(document.getElementById("n2").value); 
Number3 = parseInt(document.getElementById("n3").value); 
Number4 = parseInt(document.getElementById("n4").value); 


var topm = Number1 * Number2; 
var botm = Number3 * Number4; 
return topm + "/" + botm; } 

所以目前我的計算器工作,但沒有一個分數被簡化。我將如何能夠簡化這些分數? (我很體面的新代碼)謝謝:) 這裏是的jsfiddle鏈接:https://jsfiddle.net/Ethang70/npgL3gd9/

+0

我真的希望你縮進代碼,並將其上傳的Git過程中丟失,還包括的jsfiddle –

+0

好它並複製奇怪,反正的jsfiddle鏈接已經被添加或在這裏(https://jsfiddle.net/Ethang70/npgL3gd9 /) – Ethang70

+0

也許只是搜索分數簡化算法... http://www.jstor.org/stable/41187600?seq=1#page_scan_ tab_contents – Aeldred

回答

0

爲了簡化分數,你做的是,你計算分母和分子之間的最大公約數,並劃分既與GCD 。

計算GCD的一種方法是使用Eucledian algorithm。在Javascript

一個實現可能是:

function gcd(a,b) 
{ 
    if (b == 0) 
    { 
    return a; 
    } 
    else 
    { 
    return gcd(b, a % b); 
    } 
} 

之後,當您打印分數,你可以做這樣的事情:

function multiply() 
{ 
    Number1 = parseInt(document.getElementById("n1").value); 
    Number2 = parseInt(document.getElementById("n2").value); 
    Number3 = parseInt(document.getElementById("n3").value); 
    Number4 = parseInt(document.getElementById("n4").value); 

    var topm = Number1 * Number2; 
    var botm = Number3 * Number4; 
    var divisor = gcd(topm, botm); 
    topm = topm/divisor; 
    botm = botm/divisor; 
    return topm + "/" + botm; 
} 

祝你好運!

0

如果您打算使用小型第三方腳本,則可以查看fraction.js。按@ Zyberzero的答案,它計算非整數的最大公約數,並將它作爲最低分數它可以使一個字符串:

var myNum = 0.5; 
var fraction = new Fraction(myNum); 
console.log(fraction.toString()); // Returns 1/2 

如果結果是一個整數,它會返回相同的整數。如果結果包含的整數,則將返回格式int d/n;所以如果你只想分數,你可以在空間中分裂。

這取決於你想要去多少,但;有一些小數值在概念上表示分數,但不能劃分爲您可能想要的「最低」分數。例如,0.3333333333...表面上代表三分之一,但fractions.js會(正確)返回33/100。在我最近的使用情況,我想特別低的分數一樣1/31/92/3等(基於十進制值一樣0.330.110.66),所以我寫了一個快速&髒if/else給我下的部分我是後:

var fractionString = fraction.toString(); 

var singleQuantity = ''; 

if (fractionString.indexOf(' ') > 0) { 
    var quantitySplit = fractionString.split(' '); 
    var fractionSplit = quantitySplit[1].split('/'); 

    singleQuantity = quantitySplit[0] + ' '; 
    topFraction = parseInt(fractionSplit[0]); 
    bottomFraction = parseInt(fractionSplit[1]); 
} 

if (bottomFraction == 100) { 
    switch (topFraction) { 
     case 11 : { 
      topFraction = 1; 
      bottomFraction = 9; 
      break; 
     } 
     case 33 : { 
      topFraction = 1; 
      bottomFraction = 3; 
      break; 
     } 
    } 
} 

if (bottomFraction == 50) { 
    switch (topFraction) { 
     case 33 : { 
      topFraction = 2; 
      bottomFraction = 3; 
      break; 
     } 
    } 
} 
相關問題