4 个回答
function getFractionalExpression(value, threshold) {
    var i=1, j=1; 
    while(Math.abs(i/j - value) > threshold) {
        if (i/j > value) {
            j++;
        } else if(i/j < value) {
            i++;
        }
    }
    return i + '/' + j;
}

getFractionalExpression(0.25, 0.001);     // "1/4"
getFractionalExpression(0.33333, 0.001);  // "1/3"
getFractionalExpression(0.57142, 0.001);  // "4/7"

0.5是Number类型, 请问1/2是什么类型

如果是这样简单的数值,你可以直接用用一对象

{'0.5': '1/2', '0.333333333': '1/3'}

这样处理,真要计算的话比较麻烦,取值小数部分,计算小数部分位数,然后除以一后面跟了多少位数的零,在约分就可以。主要是约分这一块不好处理。

任何小数都可以用 n / 10^x 这样的分数表示,然后利用欧几里德算法求得最大公约数进行约分。

但小数都有精度的问题,所以事实上不能完美转换。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题