Java四舍五入、DecimalFormat、BigDecimal、NumberFormat使用方法

1.BigDecimal实现四舍五入

     *public BigDecimal divide(BigDecimal divisor, int scale,  RoundingMode roundingMode)
    *返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。如果必须执行舍入,以生成具有指定标度的结果,则应用指定的舍入模式。
      *参数:
     * divisor - 此 BigDecimal 要除以的值。
     * scale - 要返回的 BigDecimal 商的标度。
     * roundingMode - 要应用的舍入模式。
     * 返回:
     * this / divisor
     * 抛出:
     * ArithmeticException - 如果 divisor 为零,则 roundingMode==RoundingMode.UNNECESSARY
     * 和指定的标度不足以准确地表示相除的结果。

2. DecimalFormat 实现四舍五入

DecimalFormat df = new DecimalFormat("#.0000");

 * pattern:
     * 0:表示数字位,但用作小数部分时可以作为一个强制的数字位,如:1.12304(保留三位小数)#.#### 得到1.123  #.0000-> 1.230
     * #:表示数字位
     * .:小数分隔符
     * ,:整数分隔符

3. 详细见代码

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;


public class DevideTest {
    /**
     * 9.	编写一个方法完成两个数相除:double  divide(double a, double divisor);
     * 结果返回一个double数舍五入保留4位小数。
     * Math.PI 除以 1.3531 = ?
     */
    public static double divide(double a, double b){
        return a/b;
    }

    public static void main(String[] args) {
        double result = divide(Math.PI,1.3531);
        System.out.println("未四舍五入: " + result);
        DecimalFormat df = new DecimalFormat("#.0000");
        System.out.println("四舍五入之后,保留四位数结果:" + df.format(new BigDecimal(result)));

        System.out.println();
        BigDecimal decimal = new BigDecimal(Math.PI);
        BigDecimal divisor = new BigDecimal(1.3531);
        /**
         * public BigDecimal divide(BigDecimal divisor,
         *                          int scale,
         *                          RoundingMode roundingMode)
         * 返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。如果必须执行舍入,以生成具有指定标度的结果,则应用指定的舍入模式。
         *
         * 参数:
         * divisor - 此 BigDecimal 要除以的值。
         * scale - 要返回的 BigDecimal 商的标度。
         * roundingMode - 要应用的舍入模式。
         * 返回:
         * this / divisor
         * 抛出:
         * ArithmeticException - 如果 divisor 为零,则 roundingMode==RoundingMode.UNNECESSARY
         * 和指定的标度不足以准确地表示相除的结果。
         *
         */
        BigDecimal result2 = decimal.divide(divisor,4, RoundingMode.HALF_UP);
        System.out.println("四舍五入之后,保留四位数结果:" + result2);

        //NumberFormat 为父类
        NumberFormat numberFormat = NumberFormat.getInstance();

        //作用:当在网页中显示数字同样位数可以更好看,更整洁
        //保留最大整数部分
        numberFormat.setMaximumIntegerDigits(3);
        //保留最大小数部分
        numberFormat.setMaximumFractionDigits(4);//2.1230
        //保留最小小数部分
        numberFormat.setMinimumFractionDigits(3);//2.123


        //默认格式保留3位小数
        String str = numberFormat.format(Math.PI * 1000);
        System.out.println("\n Math.PI * 1000 保留3位最大整数部分 保留4位最大小数部分" + str +"结果是不正确的,舍去了3");

        //DecimalFormat是子类,pattern可以设置数字格式
        /**
         * pattern:
         * 0:表示数字位,但用作小数部分时可以作为一个强制的数字位,如:1.12304(保留三位小数)#.#### 得到1.123  #.0000-> 1.230
         * #:表示数字位
         * .:小数分隔符
         * ,:整数分隔符
         */
        DecimalFormat decimalFormat = new DecimalFormat("#,###.####");
        String relust3 = decimalFormat.format(1123.23403);
        String relust4 = decimalFormat.format(1123.23423);
        System.out.println("\n使用#,###.####,1123.23403 = " + relust3);
        System.out.println("使用#,###.####,1123.23423 = " + relust4);
    }
}

发布了28 篇原创文章 · 获赞 2 · 访问量 1473

猜你喜欢

转载自blog.csdn.net/weixin_44514198/article/details/105499842