Я использую этот код для преобразования десятичных знаков в дробь:
Number.prototype.fraction=fraction;
function fraction(decimal){
if(!decimal){
decimal=this;
}
whole = String(decimal).split('.')[0];
decimal = parseFloat("."+String(decimal).split('.')[1]);
num = "1";
for(z=0; z<String(decimal).length-2; z++){
num += "0";
}
decimal = parseInt(decimal*num);
num = parseInt(num);
for(z=2; z<decimal+1; z++){
if(decimal%z==0 && num%z==0){
decimal = decimal/z;
num = num/z;
z=2;
}
}
return ((whole==0)?"" : whole+" ")+decimal+"/"+num;
}
Это работает, но есть некоторые проблемы, которые я не могу решить. Во-первых, числа с длинными (или бесконечными) цифрами после запятой убивают страницу, поэтому мне пришлось вручную ограничивать ввод с помощью .round()
перед его использованием. Во-вторых, мне нужно иметь возможность округлить значение дроби до ближайшего 16-го.
Я понимаю, что это особенно сложная проблема, как я обнаружил, бродя по Google в течение двух дней, но, надеюсь, кто-то знает, как это сделать. Я открыт для любых решений.