javascript - 使用 JavaScript/jQuery 的杯子分数

标签 javascript jquery

假设 1 杯等于 2.36 dl。 我想要一个函数,它可以在 dl 中输入代表杯子的小数,并将杯子的数量输出为分数。

到目前为止,这是我得到的结果:

  var dl = 2.36;

  cupToFraction(.78);  // 1/3 cup
  cupToFraction(2.36); // 1 cup      
  cupToFraction(4.72); // 2 cups
  cupToFraction(8.26); // 3 1/2 cups

  function cupToFraction (cup) {
    var deci = (cup / dl);
    alert(deci);
  }

最佳答案

一种选择是使用连分数来获得有理近似值:

var dl = 2.36;
function cupToFraction (cup) {
    var deci = (cup / dl);
    var integerPart = Math.floor(deci);
    deci -= integerPart;
    deci = 1 / deci;
    var c = [];
    // Tune these parameters for how far you want the continued fraction to go
    // 3 means at most 3 terms; 10 means no terms higher than 10.
    for (let i = 0; i < 3 && deci < 10; ++i) {
      let f = Math.floor(deci);
      c.push(f);
      deci -= f;
      deci = 1/deci;
    }
    if (c.length === 0) return [integerPart, 0, 1];
    var p = 1, q = c.pop();
    while (c.length > 0) {
      var int = c.pop();
      p = q*int + p;
      [p, q] = [q, p];
    }
    // Handle case like cupToFraction(2.35)
    if (p === q) { p = 0; integerPart++; }
    return [integerPart, p, q];
}

它返回一个数组,其元素是integerPart, numerator, denominator。例如,cupToFraction(8.26) 给出 [3, 1, 2] for 3 1/2。我确信这个算法可以更优化,但现在必须这样做。

关于javascript - 使用 JavaScript/jQuery 的杯子分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581818/

相关文章:

jQuery - 触发 ('change' ) 与 change()

php - 帖子删除后删除附加文件

javascript - jQuery 验证正在重复 else 语句 |验证完成后,将不会打印值

javascript - "Reset"动态插入内容后的函数

javascript - 使用 Modulus 为 jquery 循环自定义寻呼机返回

javascript - 如何使用条件语句在 Handlebars 中显示/隐藏 html 元素

javascript - 以 Ruby on Rails 形式显示/隐藏 div

jquery - 使用 Ajax jQuery 提交 Django 表单的简单方法

javascript - 在不扭曲页面布局的情况下应用边框

javascript - props.array.map 不是函数