fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.math.*;
  4.  
  5. class Main {
  6.  
  7. public enum Distance {
  8. METER (new BigDecimal("1.0")), // Base Unit is METER
  9. KM(new BigDecimal("1E3")),
  10. CM(new BigDecimal("1E-2"));
  11.  
  12. private final static MathContext MC = new MathContext(30, RoundingMode.HALF_EVEN);
  13.  
  14. public static long convert(long value, Distance originalUnit, Distance resultingUnit) {
  15. return resultingUnit.fromBaseUnit(originalUnit.toBaseUnit(value));
  16. }
  17.  
  18. private final BigDecimal conversionRatio;
  19.  
  20. Distance(BigDecimal conversionRatio) {
  21. this.conversionRatio = conversionRatio;
  22. }
  23.  
  24. private long fromBaseUnit(BigDecimal baseUnit) {
  25. return baseUnit.divide(conversionRatio, MC).longValue();
  26. }
  27.  
  28. // returns BigDecimal to avoid rounding two times
  29. // and possible division by zero
  30. private BigDecimal toBaseUnit(long originalUnit) {
  31. return BigDecimal.valueOf(originalUnit).multiply(conversionRatio);
  32. }
  33. }
  34.  
  35. public static void main (String[] args) throws java.lang.Exception {
  36. System.out.println("2450 m in km is " + Distance.convert(2450, Distance.METER, Distance.KM));
  37. System.out.println("178 m in cm is " + Distance.convert(178, Distance.METER, Distance.CM));
  38. System.out.println("550 cm in m is " + Distance.convert(550, Distance.CM, Distance.METER));
  39. System.out.println("1 km in cm is " + Distance.convert(1, Distance.KM, Distance.CM));
  40. }
  41. }
Success #stdin #stdout 0.06s 380224KB
stdin
Standard input is empty
stdout
2450 m in km is 2
178 m in cm is 17800
550 cm in m is 5
1 km in cm is 100000