使用 Fraction.js 将小数转换为最接近 1/16 的分数

Convert decimals to fraction of nearest 1/16 using Fraction.js

我正在开发一个旧的 Angularjs 应用程序,我需要能够将十进制格式的数字转换为最接近 1/16 的分数。我已经搜索了几个小时,我发现似乎最好的一个选项是 Fraction.js. However, when following examples such as here,我得到了不正确的分数。例如:

  var convertToFraction = function (decimal) {
    // Round to the neareest 1/16
    var f = new Fraction(decimal);
    var newVal = f.toFraction();

    return newVal;
  };

如果我传入 78.6465 的值,我得到 157293/2000",如果我传入 1.500 的值,我得到 3/2。对于 78.6465,我想得到 78 5/8

我还需要做些什么才能使它成为 return 正确形式的值,而不是不正确的分数形式?另外,在将值传递给 Fraction 之前,我是否需要自己将小数点四舍五入到最接近的 1/16,就像这样?

  var convertToFraction = function (decimal) {
    // Round to the nearest 1/16
    var rounded = (Math.round(decimal * 16) / 16).toFixed(3);
    var f = new Fraction(rounded);
    var newVal = f.toFraction();
    return newVal;
  };

即便如此,我仍然得到不正确的格式。

为了得到正确的分数,我只需要将 true 参数传递给 toFraction():

var newVal = f.toFraction(true);