## The challenge

Create an application that will display the number of kilometers per liter (output) based on the number of miles per imperial gallon (input).

Make sure to round off the result to two decimal points. If the answer ends with a 0, it should be rounded off without the 0. So instead of 5.50, we should get 5.5.

Some useful associations relevant to this challenge:

`1 Imperial Gallon = 4.54609188 litres`

`1 Mile = 1.609344 kilometres`

## The solution in Java code

Option 1:

 `````` 1 2 3 4 5 6 7 8 9 10 `````` ``````public class Converter { public static float mpgToKPM(final float mpg) { float gallon = 4.54609188f; //lts float mile = 1.609344f; // kms float out = (mpg*mile)/gallon; return (float) Math.round(out*100)/100; } } ``````

Option 2:

 ``````1 2 3 4 5 6 7 8 9 `````` ``````public class Converter { private static final float LITER = 4.54609188f; private static final float KILOMETER = 1.609344f; public static float mpgToKPM(final float mpg) { return Float.parseFloat(String.format("%.2f", mpg * KILOMETER / LITER )); } } ``````

Option 3:

 ``````1 2 3 4 5 `````` ``````public class Converter { public static float mpgToKPM(final float mpg) { return Math.round(mpg * 35.4006044) / 100f; } } ``````

## Test cases to validate our solution

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 `````` ``````import static org.junit.Assert.assertEquals; import org.junit.Test; import java.util.Random; import java.math.BigDecimal; public class TestConverter { private static int NUM_RANDOM_TESTS = 40; private static int MAX_MPG = 5000; private static float KM_PER_MILE = 1.609344f; private static float LITRES_PER_GALLON = 4.54609188f; @Test public void test1() { assertEquals(3.54f, Converter.mpgToKPM(10), 0.001f); } @Test public void test2() { assertEquals(7.08f, Converter.mpgToKPM(20), 0.001f); } @Test public void test3() { assertEquals(10.62f, Converter.mpgToKPM(30), 0.001f); } @Test public void test4() { assertEquals(8.50f, Converter.mpgToKPM(24), 0.001f); } @Test public void test5() { assertEquals(12.74f, Converter.mpgToKPM(36), 0.001f); } @Test public void testRandoms() { Random random = new Random(); for(int i = 0; i < NUM_RANDOM_TESTS; i++) { int mpg = random.nextInt(MAX_MPG); assertEquals("Testing where MPG = " + mpg, solution(mpg), Converter.mpgToKPM(mpg), 0.001f); } } private float solution(final float mpg) { return new BigDecimal(mpg * KM_PER_MILE / LITRES_PER_GALLON).setScale(2,BigDecimal.ROUND_HALF_UP).floatValue(); } } ``````