首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JavaScript/jQuery从杯到分数

使用JavaScript/jQuery从杯到分数
EN

Stack Overflow用户
提问于 2018-09-30 20:23:41
回答 2查看 79关注 0票数 1

假设1杯等于2.36 dl。我想要一个函数,可以输入一个小数点,以dl表示杯/杯,并输出杯/杯的数目为一个分数。

这就是我现在所得到的:

代码语言:javascript
复制
  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);
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-30 20:55:49

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

代码语言:javascript
复制
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提供了[3, 1, 2]。我相信这个算法可能会更优化,但是现在必须这样做。

票数 1
EN

Stack Overflow用户

发布于 2020-09-06 17:07:03

一个可能更健壮和更简单的解决方案使用Fraction.js

代码语言:javascript
复制
function cupToFraction(cup) {
  return new Fraction(cup).div(2.36).simplify(0.1).toFraction(true);
}

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

所有你想要的,但输入数字被转换成分数使用Farey序列(非常稳定),你可以传递分数一样:

代码语言:javascript
复制
cupToFraction("3 2/12"); // "1 1/3"

simplify(eps)的参数可以控制精度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52581818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档