zoukankan      html  css  js  c++  java
  • [java初探10]__关于数字处理类

    • 前言
      在我们的日常开发过程中,我们会经常性的使用到数字类型的数据,同时,也会有众多的对数字处理的需求,针对这个方面的问题,在JAVA语言中.提供解决方法的类就是数字处理类

    • java中的数字处理类包括:
      • DecimalFormat类,用于格式化数字
      • Math类,为各种数学计算提供了工具方法
      • Random类,为java处理随机数问题提供了各种方法
      • BigInteger类与BigDecimal类,为java处理大数字提供了相应的数学运算操作方法.

    • DecimalFormat类

    数字的格式化在解决实际问题时,使用非常普遍,如超市的商品价格,银行的余额显示,都需要对小数的精度有特定的要求,java主要对浮点数进行格式化.JAVA语言就是通过DecimalFormat类来对其进行格式化操作的.

    DecimalFromat类是继承与NumberFormat类的,NumberFormat类又是Format类的子类,这里我们就可以很明显的观察到java类的继承机制是如何在Java类库中存在的.

    public class DecimalFormat extends NumberFormat {
    
    

    2019-4-10-02.png

    DecimalFormat类用以格式化十进制数字.他可以将一些数字格式化为整数,浮点数,百分数等.通过该类可以为要输出的数字加上单位或控制数字的精度.一般通过实例化DecimalFormat对象是传递数字格式,也可以通过类中的applyPattern方法来实现数字的格式化.

    需要注意的是:
    在格式化数字的时候,DecimalFormat类中使用了一些特殊字符构成一个格式化的模版,使数字按照一定的特殊字符来进行匹配.

    2019-4-10-03.png

    • 格式化方法体的代码
     // 第一种格式化方法,直接通过构造方法传入格式控制参数patten.
        private void NumFormating(String patten, double adouble){  // 传入两个参数,第一个控制格式,第二个为传入的数值.
        DecimalFormat format = new DecimalFormat(patten);
        System.out.println(format.format(adouble)); // 通过format方法格式化参数adouble
        }
        // 第二种格式化方法,通过类的方法applyPattern方法传入格式控制参数patten
        private void NumFormating1(String patten,double adouble){
        DecimalFormat format = new DecimalFormat();
        format.applyPattern(patten);
        System.out.println(format.format(adouble)); // 通过format方法,格式化参数adouble
        }
    
    • 测试一下:
      在主方法中通过实例化对象调用我们编写的格式化方法来对不同的特殊字符组进行示例输出:
     public static void main(String[] args) {
            Sty_DigitalProcessing digitalProcessing = new Sty_DigitalProcessing();
            digitalProcessing.NumFormating("000,000.0000",12345.67);
            digitalProcessing.NumFormating1("###,###.####",12345.67);
            digitalProcessing.NumFormating("###,###.####kg",12345.67);
            System.out.println();
            digitalProcessing.NumFormating("#.###%",0.345);
            digitalProcessing.NumFormating("0.000%",0.345);
            System.out.println();
            digitalProcessing.NumFormating("0.0000u2030",0.123456);
            digitalProcessing.NumFormating("#.####u2030",0.123456);
            System.out.println();
            digitalProcessing.NumFormating("000,000,000.0000u00A4",1234567.89);
            digitalProcessing.NumFormating("###,###,###.##'#'",1234567.89);
        }
    
    • 结果
      2019-4-10-04.png

    我们可以很明显的看出来,0和#之间的区别,前者,在位数不足时会补零,后者则不会补零.通常情况下,我们知道,一般是不会在数字前补零的,补零的情况通常出现在小数后面.


    • Math类
      Math类主要给我们提供了一些数学上的众多运算方法,我们知道,一个科学计算器是具有着非常强大功能的,而我们最基本的运算符只有"+,-,*,/".所以很多运算方法,在java语言中,都是是通过Math类实现的和提供的.
      同时,Math类也提供有众多的常量定义,因为Math中的方法是通用的,可以适用于程序的任何时候任何地方的数学运算中,所以Math类中的方法都被构建为静态的方法,使得他们都可以直接被调用.

    2019-4-10-05.png

    2019-4-10-06.png

    • Math中常用的方法
      Math中常用的数学运算方法有很多,其大致可以分为4类.三角函数方法,指数函数方法,取整方法以及取最大最小值和绝对值函数方法.

    • 三角函数方法
      2019-4-10-07.png

    它们都是静态的,所以可以直接通过类名.方法名调用.

     System.out.println(Math.sin(subtense)); // 返回正弦
            System.out.println(Math.cos(subtense)); // 返回余弦
            System.out.println(Math.tan(subtense)); // 返回正切
            System.out.println(Math.asin(subtense)); // 返回一个值的反正弦
            System.out.println(Math.acos(subtense)); // 返回一个值的反余弦
            System.out.println(Math.atan(subtense)); // 返回一个值的反正切
            System.out.println(Math.toRadians(angdeg)); // 将角度转换为弧度
            System.out.println(Math.toDegrees(angdeg)); // 将弧度转换为角度
    
    • 指数函数方法
      2019-4-10-08.png
      2019-4-10-09.png
     // 指数函数方法
        private void styindex(double adouble,double adouble1){
            System.out.println(Math.exp(adouble)); // 用于获取e的a次方
            System.out.println(Math.log(adouble)); // 用于取自然对数,lna的值
            System.out.println(Math.log10(adouble)); // 用于取底数为10的整数
            System.out.println(Math.sqrt(adouble)); // 用于取a的平方根,其中a的值不能为负值.
            System.out.println(Math.cbrt(adouble)); // 用于取a的立方根
            System.out.println(Math.pow(adouble,adouble1)); // 用于取a的b次方
        }
    
    • 取整函数方法

    2019-4-10-11.png

     private void styAdjustment(double adouble,float afloat){
            System.out.println(Math.ceil(adouble)); // 返回大于等于参数的最小整数.
            System.out.println(Math.floor(adouble)); // 返回小于等于参数的最大整数.
            System.out.println(Math.rint(adouble)); // 返回与参数最接近的整数(若为0.5取偶数,即加一)
            System.out.println(Math.round(adouble)); // 将参数家上0.5返回与参数最近的整数
            System.out.println(Math.round(afloat)); // 将参数加上0.5后返回与参数最近的整数,然后强转为长整型.
        }
    

    • 取绝对值,最大最小值的函数方法

    2019-4-10-12.png

     /**
         *  取最大值,最小值,绝对值函数方法.
         *  其方法都重载有多个类型的,满足不同类型参数的最大最小值,绝对值的获取.
         */
        private void stytakequals(double adouble,double adouble1){
            System.out.println(Math.max(adouble,adouble1)); // 取两个double型参数的最大值
            System.out.println(Math.min(adouble,adouble1));
            System.out.println(Math.abs(adouble)); // 返回double型参数的绝对值
        }
    

    • 随机数
      随机数的获取有两种方式,Math.random方法给我们提供了double型随机数的获取.Random类则要更加广泛一些,可以生成任何类型的随机数.这里直接通过代码表示了:
     /**
         * 随机数
         * Math类中有提供random方法来生产随机数.
         * 该方法默认生成0.0-1.0之间的double型随机数.
         * 但该方法通过处理后还是可以生成任何范围的随机数的.
         * ;将该方法*n后强转为int型输出,可以得到0-n范围的随机数.
         * 而m+(int)Math.random()*n,将上面的式子+m后,就可以得到m-(m+n)范围的随机数.
         */
        private void styrandom(){
            System.out.println(Math.random());
            System.out.println((int)(Math.random()*100));
            System.out.println((int)(10+Math.random()*15));
            System.out.println((char)('a'+ Math.random()*('z'-'a'+1))); // 这里其实可以封装成一个获取固定范围的随机字符的方法.
        }
        /**
         * Random类
         * Random类提供各种类型随机数的构造方法
         * 通过实例化对象调用.
         * 比Math.random更为强大.
         */
        private void styRandom(int n){ // 传入参数n 控制范围
            Random random = new Random(10000);
            System.out.println(random.nextInt());
            System.out.println(random.nextDouble());
        }
    

    关于random seedvalue的说明参看:

    一篇关于什么是随机种子的博文


    • 大数字运算
      • BigInteger类
        BigInteger类型的数范围比Integer类的要打的多,我们知道int型最大为2^31-1;而BigInteger类支持任意大小精度的整数.并且提供一些基本的运算方法,加减乘除等,这里就不多加说明了,在BigInteger类的结构视窗中可以找到他们.

    BigInteger类通过构造方法来直接将某个值转换为BigInteger类型.其构造方法有很多.

    2019-4-10-10.png

     private void styBigInteger(){
            BigInteger bigInteger = new BigInteger("12345678901234567890"); // 直接通过构造法方法,将值转为BigInteger型.
            BigInteger bigInteger1 = new BigInteger("43534645376574567314253543");
            System.out.println(bigInteger.add(bigInteger1)); // 简单的运算
        }
    

    • BigDecimal类
      相对的,BigInteger类只是针对与大整数之间的运算而BigDecimal类较其更加完善的一点就是,引入了小数概念,所以BigDecimal类支持任何精度的定点数.
      同样的BigDecimal类也提供有一些基本的运算方法.可以在类中查看.
      BigDecimal类也是通过构造方法直接转换值的类型:
      BigDecimal(double val)方法和BigDecimal(String val)方法.
    BigDecimal bigDecimal = new BigDecimal(1231234345634.546756734563);
    BigDecimal bigDecimal1 = new BigDecimal("124235345645765.783452352342534");
    

    关于java数字处理类就了解到这么多了,其实其中还有很多方法都没有涉及到,关于java的类库,其中值得学习的,涵盖着各个方面的类和方法,需要在之后的不断学习的过程中不断接触了解才能够渐渐掌握,这里也仅仅只是对其中极少的一部分基本知识做总结学习.


    • 后记
      关于java语言的基本知识大致就学到这里了,之后会新开一个笔记系列,接着学习java的核心知识,接口,继承封装,多态,类的高级特性,异常处理,Swing窗口程序设计.等等.
      可以说这才是刚刚跨入java语言的门槛吧?任务还十分艰巨,革命还需百倍努力啊!
      之后我会在出一篇关于java初探阶段的整理笔记,将这段时间的学习做一个总结归纳,并整理一下笔记的顺序,捋一捋思路.

    最后也祝愿大家都能够在自己前进的道路上披荆斩棘,共同进步,走向成功.


    更新时间:
    2019-4-10
    22:06

  • 相关阅读:
    Flex 布局语法教程
    Uni-App
    springBoot框架中几个层(dto、dao、service、controller)之间的关系
    delphi Restful:客户端实现的四种方式及其比较
    Node.js安装及环境配置之Windows篇
    MySQL 8.0.18安装教程(windows 64位)
    JDK下载和安装
    【转载】G1垃圾回收器详解
    【转载】单线程Redis性能为何如此之高?
    快速开发框架天梭(Tissot)
  • 原文地址:https://www.cnblogs.com/gemuxiaoshe/p/10686551.html
Copyright © 2011-2022 走看看