I have a BigDecimal calculation result which I need to round to the nearest specified interval (in this case it's the financial market tick size).
e.g. Price [Tick Size] > Rounded Price
100.1 ...

I'm trying to figure out how to round a monetary amount upwards to the nearest 5 cents. The following shows my expected results
1.03 => 1.05
1.051 ...

I would like to be able to round up any number to quater of the whole number.
For example:
100.33 > 100.50
100.12 > 100.25
100.66 > 100.75
100.99 > 101.00
100.70 > 100.75
100.00 > 100.00
100.25 > ... 
What is the difference between this two call? (Is there any?)
// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);

I've been trying to figure this out, and the previously related questions on SO aren't helping me out either..
I need the following results
100.12 > 100.00
100.44 > 100.00
100.50 > 101.00
100.75 > ...

Seems simple question but I really suck at math and few examples online I've searched seems not working for me. (the result just return the same value as input etc)
For instance.. ... 
In java am trying to find an efficient way to round a BigDecimal to two decimals, Up or Down based on a condition.
IF condition true then:
12.390 ...

double radius = 5;
double area = Math.PI * Math.pow(radius, 2);
// System.out.println(area);
BigDecimal bd = new BigDecimal(area).setScale(2, HALF_UP);
// BigDecimal bd = ...

I am writing a program that has to round very large and precise numbers (possibly many more significant digits than even double could handle), and am using BigDecimals.
Is there a way ... 

What would be printed to console and why?
1.
BigDecimal BigDecimalNum = new BigDecimal("0.0774");
System.out.println(BigDecimalNum.doubleValue() * 100.00);
2.
BigDecimal BigDecimalNum2 = new BigDecimal("0.0774");
System.out.println(BigDecimalNum2.multiply(new BigDecimal("100.00")));

I have read on java site to use BigDecimal for currencies.
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
But what rounding mode we should use with? which is the most appropriate one and most widely us

I have the following code to round a decimal to 2 decimal places and round half up. BigDecimal bd = new BigDecimal(d); return bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); During junit testing I was kind of amzed to find this failed for some numbers. For example, If I have 0.235 I'd expect the value to be 0.24 when it comes back however it doesn't "round ... 
Hi James, I think it's still possible to use BigDecimal for the calculation if the scale value is set higher. Then round off the final value to 2 or 3 decimal places. BigDecimal total = new BigDecimal("415"); BigDecimal rate = new BigDecimal("1.2"); BigDecimal value = rate.divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP); System.out.println(value); // output is 0.01 when scale set to 2 System.out.println(total.multiply(value)); // ... 
referrinf to following code, import java.math.BigDecimal; public class RoundTest { public static void main(String args[]) { System.out.println(round(4.4,0)); System.out.println(round(4.5,0)); System.out.println(round(4.6,0)); /* output 4.22 4.22 < 4.23 expected output by me 4.22 4.23 < 4.23 */ } private static double round(double value, int noOfDecimalDigits) { BigDecimal bd = new BigDecimal(value); bd = bd.setScale(noOfDecimalDigits, BigDecimal.ROUND_HALF_EVEN); return bd.doubleValue() ; } } but my belief is ... 
We ran up against a rounding "problem" in Java which we were unaware of. We have since discovered that if we want exact results we need to use the BigDecimal API or we could use int or long if we want to keep track of the decimal (look at Joshua Bloch's item #31 in "Effective Java"). However, my post isn't technical, ... 
Hi, I'm getting a different value than expected using BigDecimal.setScale() method and I wanted to see if someone can tell me why. Basically, (and this is not currency) a number rounded to 2 digits right of the decimal point. I also choose ROUND_HALF_DOWN so that <=5 is rounded down and >=5 is rounded up. While JUniting, I set a test case ... 




I used the class BigDecimal and used the field ROUNDHALFUP in order to round up a number, but it didn't round up. More specifically, the number was the double obtained by dividing 1942 by 40. If you divide 1942 by 40 on paper, you get 48.55 exactly, so I figured that using ROUNDHALFUP would give me 48.6 but instead I got ... 

Hi, I am trying to divide two BigDecimal numbers like this BigDecimal startDateIndexPointValue = new BigDecimal(startDateIndexedValue.toString()); BigDecimal endDateIndexPointValue = new BigDecimal(endDateIndexedValue.toString()); // where startDateIndexPointValue = 2028, endDateIndexPointValue = 2047 BigDecimal intermediateValue; intermediateValue = endDateIndexPointValue.divide(startDateIndexPointValue, 5, RoundingMode.HALF_UP); The problem is that this using this precision and using the rounding mode, I am not getting the exact intermediate value. I need the intermediate ... 
I have a requirement where the input number is 30.5 and break up scale is 10. so the out put should be as 10+10+10+0.5 Here, a) In line 28, I am trying to add the values in variable totalIncome. But it is not getting populated. b) Each time while rounding the number, I am dividing it with 1 and setting the ... 
im using BigDecimal to round a value say 2.345486768 setScale(3,RoundingMode.HALF_UP) will give me 2.345 what java does is it multiplies 2.345486768 with 10^3 and adds 0.5 to it ie; 2.345486768*1000=2345.496768+0.5= 2345.86768 so it returns 2.345 what i wanted is round from the last decimal 2.345486768 least decimal value is 8 so Rounding it to 1 decimal place less it should be ... 

Sticking with update 13, the last working release, is the only work around that we can live with. However I want to make sure that this bug will not be forgotten. The last I heard from Sun was an automated response saying that I would hear from them if the bug was accepted or marked duplicate and that they cannot respond ... 
Yes, I did. The concept of RoundingMode is not very easy to catch at first. I have been using the BigDecimal for a long time now but trying much to avoid the division complexities that could crop up. Also to note, the MathContext looks even harder to grasp so if I may say, many developer seem more comfortablet to get the ... 
Hi, To calculate money amount, we need to have 2 fraction digits. For example, 8888.567 > 8888.57 99998888.865 > 99998888.87 0.982 > 0.98 for method round(MathContext), the mathContext specifies total number of digits, not fraction digits. The workaround we have to use: amount.divide(new BigDecimal("1"), 2, RoundingMode.HALF_UP); what is the right way to achieve 2 fraction digits/halfUP? Thanks for help. Dave 


hi, i want to round a BigDecimal number to its nearest number eg. if my calculation result is 75.3 then it has to be rounded to 75 if my calculation result is 75.6 then it has to be rounded to 76 if my calculation result is 75.5 then it has to be rounded to 76 can anyone help me out resolving ... 
Can anyone refer me to a good article or site where the appropriate use of the BigDecimal Class is shown. I keep having a lot of ArithmeticException especially when doing division or setting scale. It is becoming frustrating that I refer to doing calculation with double and changing them back to BigDecimals. Thanks in advance Michael 


Hi all i know that this problem was discussed but i'm not able to resolve my problem. i know that if i have to divide a bigdecimal the best is to divide it by a new BigDecimal("100"). My problem is that i have to multiply 2 BigDecimal and scale the result to 2 decimal precision. My result is 37.34499999999999975131004248396493494510650634765625 i apply ... 
Hello, I am making a program that contain a part of accounting. I have real problems of rounding. For example : BigDecimal nbt = new BigDecimal(1.2); System.out.println(nbt); display: 1.1999999999999999555910790149937383830547332763671875 instead of 1.20 and double number= 1.2; int firsPart= (int)number; int secondPart= (int)((number (double)firsPart) * 100); System.out.println(firsPart+"/"+secondPart); display : 1/19 instead of 1/20 So what is the solution ? 
