-1

I want to round a given decimal to a number of decimal places that varies depending on user input. The other methods I know of (like BigDecimal or String.format) work with a fixed number of decimal places to round to. How do I round to a variable number of decimal places instead?

  • what do you mean by variable number of decimal place? – Parth Soni Feb 03 '14 at 05:26
  • If the user specifies five places, it will round to five places - if the user specifies two, it will round to that, etc. – user3263023 Feb 03 '14 at 05:31
  • `BigDecimal.round()` takes a MathContext argument which is constructed with an `int setPrecision` *variable.* So what's your question? – user207421 Feb 03 '14 at 05:34
  • I apologize, it seems like I hadn't quite understood how to use BigDecimal. However, the code `BigDecimal bd = new BigDecimal(num).setScale(numOfDecPlaces, BigDecimal.ROUND_HALF_UP);` works differently for even and odd numbers - 0.5595 is rounded to 0.559, when rounding to three decimal places. How can I get it to become 0.600? – user3263023 Feb 03 '14 at 06:16

1 Answers1

-1

You can use powers.

double mask = Math.pow(10, digits);
double result = Math.round(number * mask) / mask;

However, this method will not act well with larger numbers.

EDIT:

BigDecimal also has setScale. Provide the number of digits you require in the decimal part.

hsun324
  • 549
  • 3
  • 9