Расщепление и умножение двойной даст мне неправильные значения - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь умножить двойную переменную на время. Например у меня есть 2 часа 30 минут. Итак, процедура, которой я должен следовать, состоит в том, чтобы умножить 2 на 15 часов, например, а затем разделить 30 минут на 60, то есть минуты часа, а затем умножить его на 15. Вот мой код:

        Double water_time = Double.valueOf(jTextField1.getText());
        String[] seperated = String.valueOf(water_time).split("\\.");
        int[] intseperated = new int[2];
        intseperated[0] = Integer.parseInt(seperated[0]);
        intseperated[1] = Integer.parseInt(seperated[1]);
        int price1 = intseperated[0] * propertiesFile.multiply_water;
        double price2 = (intseperated[1] * propertiesFile.multiply_water) / 60.0D;
        double price = (price1 + price2);

Моя проблема в том, что когда я набираю 0,10, я получаю (0,25) правильное значение, но когда я набираю 0,11, я получаю (2,75) неправильное. И я не могу понять, почему.

Я ценю ваше время. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Проблема в том, как вы объявляете Double water_time.

0,10 становится удвоенным 0,1, так что вы фактически делите 1 на 4 и получаете математически НЕПРАВИЛЬНЫЙ 0,25

0.11 становится удвоенным 0.11, как вы можете ожидать, и затем вы делите 11 на 4, и математически ПРАВИЛЬНО 2.75

Чтобы исправить - сначала разбейте String, затем поверните значения как Doubles и рассчитайте соответственно.

Рабочий код:

    String[] seperated = jTextField1.getText().split("\\.");
    int[] intseperated = new int[2];
    intseperated[0] = Integer.parseInt(seperated[0]);
    intseperated[1] = Integer.parseInt(seperated[1]);
    int price1 = intseperated[0] * propertiesFile.multiply_water;
    double price2 = (intseperated[1] * propertiesFile.multiply_water) / 60.0D;
    double price = (price1 + price2);
0 голосов
/ 01 мая 2018

Насколько я понял, вы хотите разделить десятичное значение на 60, а затем умножить на 15. Но то, что вы сделали, сначала умножьте на 15, а затем разделите весь ответ на 60.

double price2 = (intseperated[1] / 60.0D) * propertiesFile.multiply_water;
...