как исправить погрешность элементарных вычислений

Есть вот такой код

public class Solution {

    static void solve(double meal_cost, int tip_percent, int tax_percent) {
        double tip = (meal_cost/100)* ((double) tip_percent); 
        double tax = (((double) tax_percent)/100) * ((double) tip_percent); 
        double total_cost = (meal_cost + tip + tax); 
        System.out.println(Math.round(total_cost));
    }

    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        double meal_cost = scanner.nextDouble();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        int tip_percent = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        int tax_percent = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

        solve(meal_cost, tip_percent, tax_percent);

        scanner.close();
    }
}

Передаем аргументы следующие - 15.50 15 10 На выходе получаем правильный ответ. Передаем аргументы 12.00 20 8 и получаем на выходе не правильный ответ (на еденицу больше) с чем это связано и как решить? Я понял, что ошибка где-то при округлении и конвертации. Но после того, как вывел все значения, понял, что ошибка в tax. Как исправить данную ситуацию?


Ответы (1 шт):

Автор решения: CrazyElf

Подозреваю, что налог должен считаться точно так же как и чаевые - от цены блюда, т.е.:

double tax = (meal_cost/100) * ((double) tax_percent);

Вообще, у вас много лишних скобок, можно проще это наверняка записать, но главное - формула подсчёта всё-таки.

Но наверняка я не знаю, может быть и такое, что налог считается от цены блюда + чаевые. Уточните в общем формулу.

→ Ссылка