簡體   English   中英

我正在嘗試使用HTML Javascript制作分數計算器,我需要簡化分數該怎么做?

[英]I am trying to make a Fraction Calculator in HTML Javascript, I need to simplify the fraction how can I do this?

我的計算器的非腳本部分是這樣的(包含所有輸入):

<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
 }
 }

所以我當前用於計算器的乘法部分的代碼是這樣的:

 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/

為了簡化分數,您要做的是計算分母和分子之間的最大公約數,並用GCD進行除法。

計算GCD的一種方法是使用Eucledian算法

用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;
}

祝好運!

如果您願意使用小型第三方腳本,則可以看看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;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM