Search code examples
javadecimal-point

rounding decimal points


Possible Duplicate:
Round a double to 2 significant figures after decimal point

I am trying to work with converting a decimal degree (23.1248) into a minutes style degree(23 7'29.3"). this is what I have so far:

   double a=23.1248;
   int deg=(int)a;//gives me the degree
   float b=(float) (a-deg);
   int min=(int) (b*60);//gives me the minutes
   double sec= (double) ((c*60)-min);//gives me my seconds

everything works fine, but I would like to round the seconds up to either the nearest tenth or hundrenth. I have looked at decimal formatting, but would prefer not to cast it to a string. I have also looked at bigdecimal but do not think that would be helpful,


Solution

  • Try using Math.round(double) on the number after scaling it up, then scaling it back down.

    double x = 1.234;
    double y = Math.round(x * 100.0) / 100.0; // => 1.23
    

    You can also use BigDecimal if you want to get really heavyweight:

    BigDecimal a = new BigDecimal("1.234");
    BigDecimal b = a.setScale(2, RoundingMode.DOWN); // => BigDecimal("1.23")