Rounding is a mathematical problem in our primary school, which is as simple as the 1 to 10 subtraction for our program ape. Let's look at one of the following classic examples:

public static void Main (string[] args) { System.out.println ("Rounding Value of 12.5:" + math.round (12.5)); System.out.println (rounded value of "-12.5:" + Math.Round ( -12.5)); } Rounding value of output:12.5:13-12.5 Rounding Value: 12

It's a classic case of rounding, and it's something that we often encounter when we take part in the school enrollment (it seems like I've met many times during the written test). From here, we find that the two numbers with the same absolute value, why are the approximate values different? In fact, this is determined by the rounding rule used by Math.Round.

Rounding is actually very much used in finance, especially in the interest of banks. We all know that the bank's profit channel is mainly the interest rate is poor, it collects funds from the depositors ' hands, then lends out, during the period produces the interest difference is the bank obtains the profit. If we use regular rounding rules, we use each of the 10 deposit interest calculations as a model, as follows:

Four homes: 0.000, 0.001, 0.002, 0.003, 0.004. These are the money that the banks make.

Five in: 0.005, 0.006, 0.007, 0.008, 0.009. These are the banks that are losing money: 0.005, 0.004,. 003, 0.002, 0.001, respectively.

So for a bank it should be 0.000 + 0.001 + 0.002 + 0.003 + 0.004-0.005-0.004-0.003-0.002-0.001 =-0.005. From the results can be seen every 10 interest bank may lose 0.005 yuan, do not underestimate this figure, which for the bank is a very big loss. Faced with this problem arose the following banker rounding method. The algorithm was proposed by the American banker and was mainly used to correct the error caused by the rounding rule above. As follows:

The value of the shed bit is less than 5 o'clock, and is directly shed.

The value of the shed bit is greater than 5 o'clock, and the rounding is rounded off.

When the value of the bit is equal to 5 o'clock, if there are other non-0 values after 5, then carry the back, if 5 is 0 o'clock, then according to the parity of the 5 previous one number to judge, odd carry, even shed.

For the above rules, we illustrate

11.556 = 11.56------Six in

11.554 = 11.55-----Four Homes

11.5551 = 11.56-----Five Post

11.545 = 11.54-----Five after the countless, if the former is an even-numbered should be shed

11.555 = 11.56-----After five innumerable, if the first bit is an odd number should carry

The following example uses the Banker rounding Method:

public static void Main (string[] args) { BigDecimal d = new BigDecimal (100000); Deposit BigDecimal r = new BigDecimal (0.001875*3); Interest BigDecimal i = d.multiply (R). Setscale (2,roundingmode.half_even); Using the Banker algorithm System.out.println ("Quarterly interest is:" +i); } Output: Quarterly interest is: 562.50

Here is a brief introduction to the banker rounding method, currently supported in Java 7 Rounding Method:

1, Round_up: Rounding away from 0 directions. Rounds in the direction of the absolute value, as long as the discard bit is not 0.

2, Round_down: Trend 0 Direction rounding. Enter in the direction of the smallest absolute value, all the bits are discarded, there is no rounding.

3, Round_ceiling: Rounding to positive infinity. To the positive maximum direction. If positive, the rounding behavior is similar to round_up, and if negative, the rounding behavior is similar to Round_down. The Math.Round () method is the use of this pattern.

4. Round_floor: Rounding in negative infinity direction. To the negative Infinity direction. If positive, the rounding behavior is similar to Round_down, and if negative, the rounding behavior is similar to ROUND_UP.

5, Half_up: The nearest number is rounded (5 in). This is our most classic rounding.

6, Half_down: The most recent number rounding (5 homes). Here 5 is to abandon.

7, Hail_even: Banker rounding Method.

It is necessary to mention rounding so that reserved bits are used, and in Java operations we can implement the reserved bits in many ways.

Reserved bits

**Method One: Rounding**

Double f = 111231.5585; BigDecimal B = new BigDecimal (f);d ouble f1 = B.setscale (2, roundingmode.half _UP). Doublevalue ();

Use BigDecimal here, and use the Setscale method to set the accuracy, while using the roundingmode.half_up notation to approximate the calculation using the nearest number rounding rule. Here we can see that bigdecimal and rounding are wonderful pairings.

**Way two:**

Java.text.DecimalFormat DF =new java.text.DecimalFormat ("#.00″");d F.format (the number you want to format);

Example: New Java.text.DecimalFormat ("#.00″"). Format (3.1415926)

#.00 represents two decimal places #.0000 four decimal places and so on ...

**Way three:**

Double d = 3.1415926; string result = string. Format ("%.2f");%.2f%. Indicates that any number of digits before the decimal point of 2 means that the result of the two-bit decimal format is f for floating point.

**Mode four:**

In addition, if you use the Struts label for output, there is a Format property, set to Format= "0.00" is reserved two decimal places

For example:

<bean:write name= "entity" property= "Dkhafsumpl" format= "0.00"/> or <fmt:formatnumber type= "number" Value= "${10000.22/100}" maxfractiondigits= "0"/>maxfractiondigits indicates the number of reserved bits

Reprinted from: http://blog.csdn.net/chenssy/article/details/12719811

Java Improved-----Detailed Java rounding and retention bits