java四舍五入,推荐BigDecimal

  • Post author:
  • Post category:java


第一种:Math.round   是对整数取整
public class A{

    
        public static void main(String args[]){
        
            double a = 97.62;
            

            System.out.println(Math.round(a))
        

        }




        //输出就是  98      这个无论怎么样都会四舍五入  而且是整数的,只跟第一个小数有关 跟其他小数无关  不做特别推荐

}

第二种:BigDecimal

Java的最佳实践是优先使用BigDecimal而不是Math.round()来对Java中的数字进行四舍五入。

每当我需要将数字四舍五入到小数点后n位时,我首先想到的是BigDecimal。

BigDecimal中有8中四舍五入设置方式:

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

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

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

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

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

(6).ROUND_HALF_DOWN:最近数字舍入(5舍),在这里5是要舍弃的。

(7).ROUND_HALF_EVEN:银行家舍入法。

(8).ROUND_UNNECESSARY:计算结果是精确的,不需要舍入模式。

具体示例如下:

public static void D() {
       System.out.println("四舍五入(保留位后一位是5进位) = " + new BigDecimal("2.35").setScale(1, BigDecimal.ROUND_HALF_UP)); //常用
       System.out.println("四舍五入(保留位后一位是5舍弃) = " + new BigDecimal("2.35").setScale(1, BigDecimal.ROUND_HALF_DOWN));
       System.out.println("四舍五入(保留位是奇数) = " + new BigDecimal("4.55").setScale(1, BigDecimal.ROUND_HALF_EVEN)); //向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
       System.out.println("四舍五入(保留位是偶数) = " + new BigDecimal("4.45").setScale(1, BigDecimal.ROUND_HALF_EVEN)); //向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
       System.out.println("            进位    = " + new BigDecimal("2.31").setScale(1, BigDecimal.ROUND_UP));
   }




//输出为:
四舍五入(保留位后一位是5进位) = 2.4
四舍五入(保留位后一位是5舍弃) = 2.3
四舍五入(保留位是奇数) = 4.6
四舍五入(保留位是偶数) = 4.4
            进位    = 2.4

第三种:DecimalFormat   这个不会进位   是选择你想保留的小数位

DecimalFormat默认采用了RoundingMode.HALF_EVEN这种类型,而且format之后的结果是一个字符串类型String。

DecimalFormat 包含一组符号,对于各符号的含义解释如下:


0 一个数字

# 一个数字,不包括 0

. 小数的分隔符的占位符

, 分组分隔符的占位符

; 分隔格式。

– 缺省负数前缀。

% 乘以 100 和作为百分比显示

? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代 替十进制分隔符。

具体示例如下:


DecimalFormat df = new DecimalFormat(“#.000”);

System.out.println(df.format(new BigDecimal(1.0145)));

System.out.println(df.format(new BigDecimal(1.1315)));

输出为:

1.014

1.131



版权声明:本文为m0_64979027原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。