In this HackerRank challenge, I need to **find the total meal cost** by adding **tip_percent** which is **20%** of the meal_cost and **tax_percent** which is **8%** of the meal_cost and the meal_cost being **$12**. So the output must be a round number of 15 but **my output comes out as $14.**

It does seem to work properly with custom values like $12.50 for meal_cost which later totaled comes out as a rounded value of $16. What am I doing wrong here?

static double findMealTotal(double meal_cost, int tip_percent, int tax_percent) { tip_percent = (int)(meal_cost * tip_percent)/100; tax_percent = (int)(meal_cost * tax_percent)/100; return meal_cost + tip_percent + tax_percent; } private static final Scanner scanner = new Scanner(System.in); public static void main(String[] args) { double meal_cost = scanner.nextDouble(); int tip_percent = scanner.nextInt(); int tax_percent = scanner.nextInt(); //changed solve to mealTotal double mealTotal = findMealTotal(meal_cost, tip_percent, tax_percent); System.out.println(Math.round(mealTotal)); scanner.close(); }

## Advertisement

## Answer

You are using integers. Integers are rounded, so you loose precision over the next calculation. Try using doubles and cast to int at the end.

static void Main(string[] args) { double cost = findMealTotal(12, 20, 8); Console.WriteLine(cost.ToString()); } static double findMealTotal(double meal_cost, int tip_percent, int tax_percent) { double tip = meal_cost * tip_percent / 100; double tax = meal_cost * tax_percent / 100; return meal_cost + tip + tax; }

And don’t reuse parameters inside your function. It is bad practice.

**4**People found this is helpful