【问题标题】:jquery convert results of decimal into fractionsjquery将小数的结果转换为分数
【发布时间】:2014-04-17 14:11:46
【问题描述】:

我有将像素转换为英寸的代码。但结果是小数。

如何让结果返回英寸的分数,例如:1/4 而不是 .25

这是 HTML:

<label>Pixels</label>
<input class="calcd" id="calc3" type="text" />
<input class="calcd" id="calc4" type="hidden" value="96" />
<br />Inches <span id="result2"></span>

这里是 Jquery:

$(document).ready(function(){
    $(".calcd").keyup(function(){
        var val1 = parseInt($("#calc3").val());
        var val2 = parseInt($("#calc4").val());
        if ( ! isNaN(val1) && ! isNaN(val2))
        {
            $("#result2").text((val1 / val2).toFixed(2));
        }
    });
});

我在 stackoverflow 上看到 this

在哪里可以使用var decimal = eval(fraction);,但我对此感到困惑。

这里是JsFiddle

【问题讨论】:

标签: javascript jquery html jquery-calculation


【解决方案1】:

你有2个选项:

另外你只需要一个$(document).ready(function () {

希望这会有所帮助。 :)

代码

$(document).ready(function () {

    $(".calc").keyup(function () {

        var val1 = parseInt($("#calc1").val());
        var val2 = parseInt($("#calc2").val());

        if (!isNaN(val1) && !isNaN(val2)) {
            $("#result").text(val1 * val2);
        }
    });

    $(".calcd").keyup(function () {

        var val1 = parseInt($("#calc3").val());
        var val2 = parseInt($("#calc4").val());

        if (!isNaN(val1) && !isNaN(val2)) {
            $("#result2").text(fraction((val1 / val2).toFixed(2)));
        }
    });
});

//convert a decimal into a fraction
function fraction(decimal) {

    if (!decimal) {
        decimal = this;

    }
    whole = String(decimal).split('.')[0];
    decimal = parseFloat("." + String(decimal).split('.')[1]);
    num = "1";
    for (z = 0; z < String(decimal).length - 2; z++) {
        num += "0";
    }
    decimal = decimal * num;
    num = parseInt(num);
    for (z = 2; z < decimal + 1; z++) {
        if (decimal % z == 0 && num % z == 0) {
            decimal = decimal / z;
            num = num / z;
            z = 2;
        }
    }
    //if format of fraction is xx/xxx
    if (decimal.toString().length == 2 && num.toString().length == 3) {
        //reduce by removing trailing 0's
        decimal = Math.round(Math.round(decimal) / 10);
        num = Math.round(Math.round(num) / 10);
    }
    //if format of fraction is xx/xx
    else if (decimal.toString().length == 2 && num.toString().length == 2) {
        decimal = Math.round(decimal / 10);
        num = Math.round(num / 10);
    }
    //get highest common factor to simplify
    var t = HCF(decimal, num);

    //return the fraction after simplifying it
    return ((whole == 0) ? "" : whole + " ") + decimal / t + "/" + num / t;
}

function HCF(u, v) {
    var U = u,
        V = v
    while (true) {
        if (!(U %= V)) return V
        if (!(V %= U)) return U
    }
}

工作截图

【讨论】:

  • 谢谢你!这正是我所需要的。
  • 嗨,这一切都很好,除了在无法减少的 xx/xx 形式的分数上它变得混乱。例如,12/16 吐出为 3/4(正确),而 11/16 吐出为 1/2(不正确)。 13/16 以 1/2 出现,15/16 以 1/1 出现。有任何调整还是我遗漏了什么?
猜你喜欢
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 2011-11-11
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多