您的位置:首页 > 编程语言 > Java开发

小白学Java13:数学工具类:Math,高精度计算和数字格式化

2020-06-04 06:37 134 查看

数学工具类:Math,高精度计算和数字格式化

  • 高精度计算类:DigDecimal
  • 数字格式化:NumberFormat
  • 自定义数字格式化类:DecimalFormat
  • 数学工具类:Math

    • Math 类包含基本的数字操作,如指数、对数、平方根和三角函数;Math中方法和常量都是静态的,因此可以通过类名直接调用

    常用方法:

    常用的方法:
    •static double abs(double a); //有重载方法 绝对值
    •static double ceil(double a); //有重载方法 向上取整(只要有小数部分不为0,就进1
    •static double floor(double a); //有重载方法 向下取整(只要有小数部分不为0,就不进1
    •static long round(double a); //有重载方法 四舍五入
    •static double pow(double a, double b); //次方
    •static double random();//随机数
    •static double max(double a,double b);//求两数的大值
    •static double min(double a,double b);//求两数的小值

    随机数类:Random

    创建:
    Random ra = new Random();
    
    使用:
    int i = ra.nextInt();  //取值范围

    高精度计算类:DigDecimal

    • 当我们计算小数的时候,很多时候得不到准确的值
    double a = 0.3;
    double b = 3;
    double c = a*b;
    System.out.println(c); //0.8999999999999999
    • 这个时候就需要使用java的高精度计算类:BigDecimal

    构造方法

    BigDecimal bd = new BigDecimal("0.3");
    BigDecimal bd2 = new BigDecimal(3.0);

    常用方法

    常用方法:
    •BigDecimal add(BigDecimal augend); // 加法
    BigDecimal add = bd.add(bd2);
    •BigDecimal subtract(BigDecimal subtrahend); // 减法
    BigDecimal subtract = bd.subtract(bd2);
    •BigDecimal multiply(BigDecimal multiplicand); //乘法
    BigDecimal multiply = bd.multiply(bd2);
    •BigDecimal divide(BigDecimal divisor);  //  除
    BigDecimal divide = bd.divide(bd2);
    重载: BigDecimal divide(divisor, scale, roundingMode)
    divisor:除数
    scale:位数
    roundingMode:舍入模式:
    
    •BigDecimal setScale(int newScale, int roundingMode);
    保留小数位       位数,舍入模式
    //保留小数位(newScale:保留几位小数,roundingMode:舍入模式)
    BigDecimal setScale(int newScale, int roundingMode)
    //取余运算
    BigDecimal remainder(BigDecimal divisor);
    //求相反数
    BigDecimal negate();
    //比较大小(左边比右边数大返回1,相等返回0,比右边小返回-1)
    int compareTo(BigDecimal val);
    //将BigDecimal对象中的值以整数返回
    int intValue()
    //将BigDecimal对象中的值以double类型返回
    double doubleValue()
    //将BigDecimal对象中的值以float类型返回
    float floatValue()
    //将BigDecimal对象中的值以long类型返回
    long longValue()
    //将BigDecimal对象中的值以String类型返回
    String toString()

    关于小数的舍入模式

    BigDecimal中的divide(BigDecimal divisor, int scale, int roundingMode) 方法,需要用到舍入模式。
    
    ROUND_CEILING(往右靠近): 舍位时往正无穷方向移动 1.1-> 2 1.5-> 2 1.8-> 2 -1.1-> -1 -1.5-> -1 -1.8-> -1
    ROUND_DOWN(往0靠近,正数全舍,负数进1):向0的方向移动1.1-> 1 1.5-> 1 1.8-> 1 -1.1-> -1 -1.5-> -1 -1.8> -1
    ROUND_FLOOR(往左靠近):与CEILING相反,往负无穷 1.1-> 1 1.5-> 1 1.8-> 1 -1.1-> -2 -1.5-> -2 -1.8-> -2
    ROUND_HALF_DOWN(五舍六入):以5为分界线,或曰五舍六入1.5-> 1 1.6-> 1 -1.5-> -1 -1.6-> -2
    ROUND_HALF_EVEN(前一位是偶数五舍去,前一位是奇数,五进1):同样以5为分界线,如果是5,则前一位变偶数1.15-> 1.2 1.16-> 1.2 1.25-> 1.2 1.26-> 1.3
    ROUND_HALF_UP(四舍五入):最常见的四舍五入
    UNNECESSARY:无需舍位
    ROUND_UP:与ROUND_DOWN,远离0的方向1.1-> 2 1.5-> 2 1.8-> 2 -1.1-> -2 -1.5-> -2 -1.8-> -2

    数字格式化:NumberFormat

    采用单例模式实现

    构造方法

    static NumberFormat getInstance();
    NumberFormat nf  = NumberFormat.getInstance();

    常用方法

    •void setMaximumFractionDigits(int newValue),//设置最大小数保留位数
    •void setMinimumFractionDigits(int newValue)//设置最小小数保留位数
    •void setMaximumIntegerDigits(int newValue)//设置最大整数保留位数
    •void setMinimumIntegerDigits(int newValue)//设置最小整数保留位数
    •String format(long number)  //格式化给定数字
    •Number parse(String source) //解析为数字

    自定义数字格式化类:DecimalFormat

    构造方法

    •DecimalFormat(String pattern)
    DecimalFormat df = new DecimalFormat("格式");
    
    #:表示此位置可有可无
    0:占位符,此位置必须有数字
    %:此数字以百分比表示

    数字转字符串:format()

    DecimalFormat df = new DecimalFormat("0.0%");
    double d = 0.42;
    
    String format = df.format(d);
    System.out.println(format);

    字符串转数字:parse()

    try {
    Double parse = (Double)df.parse(format);
    System.out.println(parse);
    } catch (ParseException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }
    }
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: