2

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

I have a matrix.I found the 10th power of matrix using Java.After finding the 10th power,I need to round off the double values to 3 decimal places.Please help me to round off the double values in the matrix to 3 decimal places.

Community
  • 1
  • 1
S.PRATHIBA
  • 21
  • 1
  • 2

5 Answers5

4

You can't really round double values to decimal places since double is a binary format, not decimal, and will internally be rounded to binary fractions.

Instead, you should do the rounding when you format the output. This can be done in Java in a number of ways:

String.format("%.2f", 1.2399) // returns "1.24"
new DecimalFormat("0.00").format(1.2)// returns "1.20"
new DecimalFormat("0.##").format(1.2)// returns "1.2"

Read the Floating-Point guide for more detailed information.

Michael Borgwardt
  • 327,225
  • 74
  • 458
  • 699
1

Or if you really want a double with the value (close to) rounded you could do something like:

val = Math.round(val * 1000) / 1000.0;

where val is the number you want rounded. I used 1000 for 3 decimal places; use 10^n for n decimal places.
Also notice that after '/' I used the double literal '1000.0' (with the '.0' after '1000') to ensure the result is a double (since Math.round rounds off to a long value).

Andrei Fierbinteanu
  • 7,218
  • 3
  • 29
  • 45
0

You can use DecimalFormat class. Something like this

double unformated = 0.34556 // your double;
double formated = new DecimalFormat("0.###").format((double)unformated);
Mojo Risin
  • 8,072
  • 5
  • 43
  • 57
0

Try using java.math.BigDecimal to round:

BigDecimal initialValue = new BigDecimal(65.432105);
double rounded = initialValue.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("rounded = " + rounded ); // outputs 65.432
Curtis Tasker
  • 9,687
  • 1
  • 19
  • 23
0

try the following obsurce piece of code. This only works for |values| < Long.Max_VALUE/1000

public static double round3(double d) {
  return ((double) (long) ((d < 0 ? d - 0.5 : d + 0.5) * 1000))/1000;
}
Peter Lawrey
  • 498,481
  • 72
  • 700
  • 1,075