![](/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.