rounding decimal points

Paul Robert Carlson picture Paul Robert Carlson · Jan 11, 2012 · Viewed 57.5k times · Source

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,

Answer

maerics picture maerics · Jan 11, 2012

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")