繁体   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