将浮点数转换为javascript中的近似分数

dst*_*arh 4 javascript math decimal fractions

我们需要将计算出的值(例如3.33333000540733337)转换为3 1/3.我试过的任何库如https://github.com/peterolson/BigRational.js都会将其转换为最准确的有理数,而我只关注近似有理数,到.01有效小数.

在ruby中,我们目前使用Rational(1.333).理性化(Rational(0.01)),它给出1作为整数,1作为分子,3作为分母.

对可能有用的算法的任何想法都会很棒.

Jua*_*hez 5

你可以使用https://github.com/peterolson/BigRational.js库来使用这样的函数:

function rationalize(rational, epsilon) {
    var denominator = 0;
    var numerator;
    var error;

    do {
        denominator++;
        numerator = Math.round((rational.numerator * denominator) / rational.denominator);
        error = Math.abs(rational.minus(numerator / denominator));
    } while (error > epsilon);
    return bigRat(numerator, denominator);
}
Run Code Online (Sandbox Code Playgroud)

它将返回一个bigRat对象.您可以使用以下方法检查您的示例:

console.log(rationalize(bigRat(3.33333000540733337),0.01));
Run Code Online (Sandbox Code Playgroud)