首页 > 解决方案 > 使用 Fraction.js 将小数转换为最接近 1/16 的分数

问题描述

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

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

    return newVal;
  };

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

我还需要做些什么来让它以正确的形式返回值,而不是不正确的分数形式?另外,在将值传递给 之前,我是否需要自己将小数四舍五入到最接近的 1/16 Fraction,像这样?

  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;
  };

即使这样,我仍然得到不正确的格式。

标签: javascriptmathfractions

解决方案


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

var newVal = f.toFraction(true);

推荐阅读