java提高篇(三)_四舍五入 转自 http://cmsblogs.com

美国银行家银行家舍入法

      舍去位的数值小于5时,直接舍去。

      舍去位的数值大于5时,进位后舍去。

      当舍去位的数值等于5时,若5后面还有其他非0数值,则进位后舍去,若5后面是0时,则根据5前一位数的奇偶性来判断,奇数进位,偶数舍去。

举例:

         11.556 = 11.56          ------六入

         11.554 = 11.55          -----四舍

 

         11.5551 = 11.56         -----五后有数进位

 

         11.545 = 11.54          -----五后无数,若前位为偶数应舍去

 

         11.555 = 11.56          -----五后无数,若前位为奇数应进位

 

JAVA 支持的7种舍入法

在上面简单地介绍了银行家舍入法,目前java支持7中舍入法:

      1、 ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。

 

      2、 ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。

 

     3、 ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于ROUND_UP,若为负数,舍入行为类似于ROUND_DOWN。Math.round()方法就是使用的此模式。

 

      4、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于ROUND_DOWN;若为负数,舍入行为类似于ROUND_UP。

 

      5、 HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。

 

      6、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。

 

      7、 HAIL_EVEN:银行家舍入法。

 


 

 

      提到四舍五入那么保留位就必不可少了,在java运算中我们可以使用多种方式来实现保留位。

保留位

方法一:四舍五入

 

double   f   =   111231.5585;
BigDecimal   b   =   new   BigDecimal(f);
double   f1   =   b.setScale(2,   RoundingMode.HALF_UP).doubleValue();

 

       在这里使用BigDecimal ,并且采用setScale方法来设置精确度,同时使用RoundingMode.HALF_UP表示使用最近数字舍入法则来近似计算。在这里我们可以看出BigDecimal和四舍五入是绝妙的搭配。

 

方式二:

java.text.DecimalFormat   df   =new   java.text.DecimalFormat(”#.00″);
df.format(你要格式化的数字);

   例:new java.text.DecimalFormat(”#.00″).format(3.1415926)

      #.00 表示两位小数 #.0000四位小数 以此类推…

方式三: 

 

double d = 3.1415926;

String result = String .format(”%.2f”);

%.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型。

方式四: 

      此外如果使用struts标签做输出的话,有个format属性,设置为format="0.00"就是保留两位小数

      例如:

复制代码
<bean:write name="entity" property="dkhAFSumPl"  format="0.00" />

或者

<fmt:formatNumber type="number" value="${10000.22/100}" maxFractionDigits="0"/>

maxFractionDigits表示保留的位数

 

 

 

posted @ 2014-07-03 11:55  Jerry_China  阅读(309)  评论(0编辑  收藏  举报