Convert a decimal number to a fraction / rational number

前端 未结 11 1839
情歌与酒
情歌与酒 2020-12-01 16:36

In JavaScript, is there any way to convert a decimal number (such as 0.0002) to a fraction represented as a string (such as \"2/10000\")?

I

11条回答
  •  不知归路
    2020-12-01 17:07

    Very old question but maybe someone can find this useful. It's iterative, not recursive and doesn't require factorization

    function getClosestFraction(value, tol) {
        var original_value = value;
        var iteration = 0;
        var denominator=1, last_d = 0, numerator;
        while (iteration < 20) {
            value = 1 / (value - Math.floor(value))
            var _d = denominator;
            denominator = Math.floor(denominator * value + last_d);
            last_d = _d;
            numerator = Math.ceil(original_value * denominator)
    
            if (Math.abs(numerator/denominator - original_value) < tol)
                break;
            iteration++;
        }
        return {numerator: numerator, denominator: denominator};
    };
    

提交回复
热议问题