![](/img/trans.png)
[英]How can I reformat 1 1/2 into pretty fraction HTML using regex and 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/3
, 1/9
, 2/3
等(基于十进制值像0.33
, 0.11
, 0.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.