java проблема с double

366
04 ноября 2017, 12:48

Уважаемые хелп!!! Задача у меня была следующая, написать деление двух int , результат double , потом в этом double анализируя 12 знаков после запятой найти период , пример (1/3 = 0,(3), 7/12 = 0,58(3), 1/2 = 0,5)

Написал отдельно деление (принимает два инта , возвращает double) отдельно поиск периода (принимал double, возвращал строку).

Столкнулся с проблемой , деление возвращает 31243643,6 (при анализе на период ожидается такой и вывод, так как периода нет), но при передаче этого числа параметром в метод поиска периода оно уже в виде 3,.....Е-7 (то есть в экпоненциалной записи) и такую чепуху и выводит , причем такое происходит не со всеми числами (я так понимаю что проблема в представлении чисел с точкой в памяти) . проблему решил возвратом после деления стринги и передачи для анализа периода тоже стринги.

Eсть ли другой способ бороться с этим!!!

Два варианта кода

public class Main {
public static void main(String[] args) throws IOException {
    System.out.println(doubleDivision(468654654,15));
}
//static String doubleDivision(int divident, int divisor) {
static double doubleDivision(int divident, int divisor) {
    int symbolAfterComma = 0;
    StringBuilder result = new StringBuilder();
    while (symbolAfterComma <= 11 && divident != 0) {
        if (divident >= divisor) {
            int divCounter = 0;
            while (divident >= divisor) {
                divident = divident - divisor;
                divCounter++;
            }
            result.append(divCounter);
        } else {
            if (symbolAfterComma == 0) {
                result.append(".");
            }
            divident = divident * 10;
            while (divident < divisor) {
                divident = divident * 10;
                result.append("0");
                symbolAfterComma++;
            }
            int divCounter = 0;
            while (divident >= divisor) {
                divident = divident - divisor;
                divCounter++;
            }
            symbolAfterComma++;
            result.append(divCounter);
        }
    }
    //return result.toString();
    return Double.valueOf(result.toString());
}

}

READ ALSO
Как мониторить API

Как мониторить API

Есть немалое количество java api'шек на jetty которое надо как то мониторить на предмет живы ли ониМогут ли подключаться к бд, быстро ли работают,...

284
java вывод double

java вывод double

Почему такое выражение - Systemout

262
Ошибка в Java Javax.swing

Ошибка в Java Javax.swing

Работаю в программе EclipseСтрочка import javax

332
Как достать из строки LocalTime?

Как достать из строки LocalTime?

Наш препод решил нас озадачить и вот сейчас у нас есть вот такой массив строк String[] attributes = linesplit(";"); в нем мы разделяем вот такую строку 1508877719;KRP;All;Text;...

367