Я понимаю, что это ОЧЕНЬ старый, но я недавно столкнулся с этим вопросом. Мне нужно было дать отношения двум сегментам данной популяции, где цифры могут быть довольно большими, но нужно было упрощенное соотношение, такое как 3: 5 или 2: 7. Я придумал это и надеюсь, что это поможет:
function getRatio(a,b,tolerance) {
/*where a is the first number, b is the second number, and tolerance is a percentage
of allowable error expressed as a decimal. 753,4466,.08 = 1:6, 753,4466,.05 = 14:83,*/
if (a > b) { var bg = a; var sm = b; } else { var bg = b; var sm = a; }
for (var i = 1; i < 1000000; i++) {
var d = sm / i;
var res = bg / d;
var howClose = Math.abs(res - res.toFixed(0));
if (howClose < tolerance) {
if (a > b) {
return res.toFixed(0) + ':' + i;
} else {
return i + ':' + res.toFixed(0);
}
}
}
}