Java 数字处理工具类

 

此文主要介绍 BigInteger  BigDecimal  DecimalFormat

BigIntegerL: 提供了对超过Integer数字范围进行处理的方法

BigDecimal:  在对浮点数进行计算的时候,float和double这两种数据类型常常丢失精度。

                      为了提升精度,Java提出了BigDecimal类。

DecimalFormat:对BigDecimal表示的浮点数进行格式化

 

代码示例:

package com.seven.javaSE;

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

public class NumberFormatDemo {
    public static void main(String[] args) {
        
        double aa = Math.PI;
        double PI = 3.1415926;
        /*
         * 对浮点数进行格式化,DecimalFormat
         */
        
        //取一位整数
        System.out.println(new DecimalFormat("0").format(PI));   //3
        //取一位整数和两位小数
        System.out.println(new DecimalFormat("0.00").format(PI));   //3.14
        //取两位整数和3位小数,整数位不足就用0填充
        System.out.println(new DecimalFormat("00.000").format(PI));  //03.141
        //取所有整数部分
        System.out.println(new DecimalFormat("#").format(PI));
        //以百分比方式计数,并取两位小数
        System.out.println(new DecimalFormat("#.##%").format(PI));
        
        
        /*
         * 大整数进行(加、减、乘、除、求余)计算
         */
        BigInteger bi = new BigInteger("123456789");
        BigInteger bi2 = new BigInteger("100000000");
        System.out.println(bi.add(bi2));
        System.out.println(bi.subtract(bi2));
        System.out.println(bi.multiply(bi2));
        System.out.println(bi.divide(bi2));
        System.out.println(bi.remainder(bi2));
        
        System.out.println("-------------------------------------------");
        /*
         * 浮点数进行(加、减、乘、除、求余)计算
         */
        BigDecimal bd = new BigDecimal("12.3456789");
        BigDecimal bd2 = new BigDecimal("1.00000001");
        System.out.println(bd.add(bd2));
        System.out.println(bd.subtract(bd2));
        System.out.println(bd.multiply(bd2));
        /*
         * 值得注意的是,使用devide()方法做浮点数除法,容易抛出java.lang.ArithmeticException的算数异常
         * 这是因为出现了除不尽的情况,商是无限位的
         * 这个时候可以在 divide() 方法中传入 MathContext 对象或 RoundingMode 对象,指定精度和舍入模式
         * 
         *  常量名             说明
            CEILING        向正无限大方向舍入。
            DOWN           向零方向舍入。
            FLOOR          向负无限大方向舍入。
            HALF_DOWN      向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向下舍入。
            HALF_EVEN      向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
            HALF_UP        向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向上舍入。
            UNNECESSARY    断言具有精确结果。

         */
        System.out.println(bd.divide(bd2,RoundingMode.HALF_UP));
        System.out.println(bd.remainder(bd2));
    }
}

 

posted @ 2022-06-05 21:46  藤原豆腐渣渣  阅读(241)  评论(0编辑  收藏  举报