У меня есть метод, который преобразует десятичное число (двойное значение) в дробь и помещает значения числителя и знаменателя в int[] размера 2.
Тестирование работает нормально для большинства значений, за исключением случаев, когда я нажимаю 0.0001
. Тогда возвращаемое значение равно 1.0/1.0
.
Метод:
private static int[] toFractionPos(double x){
String[] parts = Double.toString(x).split("\\.");
double den = Math.pow(10, parts[1].length()); //denominator
double num = Double.parseDouble(parts[0]) * den + Double.parseDouble(parts[1]); //numerator
return reduceFraction((int)num, (int)den);
}
reduceFraction()
метод:
public static int[] reduceFraction(int num, int den){
int gcf = GCF(num, den); //greatest common factor
int[] rf = {num/gcf, den/gcf};
return rf;
}
Спасибо!