Я пытаюсь создать метод, который возвращает дробное значение десятичного числа.
//these are included in a class called 'equazioni'
private static long getMCD(long a, long b) {
if (b == 0)
{ return a; }
else
{ getMCD(b, a % b); }
}
public String getFraction(double a) {
String s = String.valueOf(a);
int decimali = s.length() - 1 - s.indexOf('.');
int den = 1;
for(int i = 0; i < decimali; i++){
a *= 10;
den *= 10;
}
int num = (int) Math.round(a);
long mcd = getMCD(num,den);
return String.valueOf(num/mcd) + "/" + String.valueOf(den/mcd);
}
Эти 2 метода прекрасно работают с большинством значений. Например, при 8,65 возвращается 173/20, а при 78,24 возвращается 1956/25. Это называется так:
equazioni eq = new equazioni(a,b,c);
jTextField4.setText("8.65= " + eq.getFraction(8.65));
У меня проблемы с дробями, такими как 2/3, 5/18, 6/45... потому что знаменатель делится на 3, и поэтому дробь является периодическим числом. Как я мог это представить?
Моя проблема также заключается в том, «Как я могу узнать, что это периодическое число?». Я думал, что я мог бы что-то вроде этого
int test = den % 3;
Если знаменатель делится на 3, то я должен составить дробь определенным образом. Любое предложение?