Я пытаюсь преобразовать десятичные дроби в дроби.моя программа отлично работает для других номеров.однако при попытке найти числитель и знаменатель для 1.0923059908040425e-33,
java дает 1/9, где как python дает 0.
это мой код для java:
class Rational {
public static void main(String[] args) {
println(getDenominator(convertDecimalToFraction(1.0923059908040425e-33)));
}
public static int getNumerator(String fraction) {
return Integer.valueOf(fraction.substring(0, fraction.indexOf(".")));
}
public static int getDenominator(String fraction) {
fraction = fraction.substring(fraction.indexOf("/") + 1);
return Integer.valueOf(fraction.substring(0, fraction.indexOf(".")));
}
static private String convertDecimalToFraction(double x){
if (x < 0){
return "-" + convertDecimalToFraction(-x);
}
double tolerance = 1.0E-6;
double h1=1; double h2=0;
double k1=0; double k2=1;
double b = x;
do {
double a = Math.floor(b);
double aux = h1; h1 = a*h1+h2; h2 = aux;
aux = k1; k1 = a*k1+k2; k2 = aux;
b = 1/(b-a);
} while (Math.abs(x-h1/k1) > x*tolerance);
return h1+"/"+k1;
}
}
и это python:
print(fractions.Fraction(1.0923059908040425e-33).limit_denominator())
Я думаю, что проблема в моем коде Java, потому что я ожидаю 0 в качестве правильного вывода, но есть встроенная библиотека для фракций, и я нене хочу использовать какие-либо сторонние библиотеки.
Java-код работает в основном на всех входах.Единственная проблема с этим одним входом.пожалуйста, укажите мне ошибку, если таковые имеются.Я был бы очень признателен, если бы вы могли предоставить мне метод или логику, которая может решить эту проблемупосле добавления limit_denominator он становится 0. Я не знаю, что здесь происходит ..