zoukankan      html  css  js  c++  java
  • BigDecimal 、BigInteger

    package com.BigDecimal;
    
    public class BigDecimalDemo {
        /*
         * 下面的运算的结果出乎我们的意料,有些准确,有些不准确
         * 这是为什么呢?
         * 我们知道,数据进行运算时先将它转换成为补码进行运算,所以就设计到一个二进制转换的问题
         *    浮点数的小数点后面的数是乘以2得1 0计算二进制的对吧,因为有些小数无论如何就是不能得到0,
         *    也就是一个无限的小数类,这样的数据永远无法得到完整的10表示,所以float和double操作时候
         *    出现一个叫做有效数字的说法。当然后面一个是可以的,那是因为两个浮点数刚好可以转换好0101
         *          这是因为浮点数的存储和整形的存储不同导致的。它们大部分的时候,都是带有有效数字位
         * 引出BigDecimal
         *      由于在运算的时候,float类型和double很容易丢失精度。所以,为了能精确的表示、计算浮点数,java提供了BigDecimal
         * BigDecimal类概述
         *     不可变的,任意精度的有符号十进制数。可以解决精度丢失问题
         */
        public static void main(String[] args) {
            System.out.println(0.09+0.01);//0.09999999999999999
            System.out.println(1.0-0.32);//0.6799999999999999
            System.out.println(1.015*100);//101.49999999999999
            System.out.println(1.301/100);//0.013009999999999999
            
            System.out.println(1.0-0.12);//0.88
        }
    
    }
    
    package com.BigDecimal;
    
    import java.math.BigDecimal;
    
    /*
     * 构造方法
     *     public BigDecimal(String val)
     * 
     *     public BigDecimal add(BigDecimal augend) :加
     *     public BigDecimal subtract(BigDecimal subtrahend) 减
     *     public BigDecimal multiply(BigDecimal multiplicand) 乘
     *     public BigDecimal divide(BigDecimal divisor) 除
     *     public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode) 商 几位小数 如何舍取
     * 
     * 
     */
    public class BigDecimalDemo02 {
        public static void main(String[] args) {
    //        System.out.println(0.09+0.01);//0.09999999999999999
    //        System.out.println(1.0-0.32);//0.6799999999999999
    //        System.out.println(1.015*100);//101.49999999999999
    //        System.out.println(1.301/100);//
            BigDecimal bd1=new BigDecimal("0.09");
            BigDecimal bd2=new BigDecimal("0.01");
            System.out.println("add:"+bd1.add(bd2));
            System.out.println("--------------------------");
            
            BigDecimal bd3=new BigDecimal("1.0");
            BigDecimal bd4=new BigDecimal("0.32");
            System.out.println("subtract:"+bd3.subtract(bd4));
            System.out.println("--------------------------");
            
            BigDecimal bd5=new BigDecimal("1.015");
            BigDecimal bd6=new BigDecimal("100");
            System.out.println("multiply:"+bd5.multiply(bd6));
            System.out.println("--------------------------");
            
            BigDecimal bd7=new BigDecimal("1.301");
            BigDecimal bd8=new BigDecimal("100");
            System.out.println("divide:"+bd7.divide(bd8));
            System.out.println("--------------------------");
            System.out.println("divide:"
                    +bd7.divide(bd8,3,BigDecimal.ROUND_HALF_UP));//ROUND_HALF_UP四舍五入,其他方式舍取看API
            System.out.println("divide:"
                    +bd7.divide(bd8,8,BigDecimal.ROUND_HALF_UP));
        }
    }
    View Code
    package com.BigInteger;
    
    import java.math.BigInteger;
    
    public class BigIntegerDemo {
        /*
         * 引入BigInteger
         *     Integer的范围是太小了,无法进行大的整数运算
         * java.math
         * 不可变的任意精度的整数。所有操作都以二进制补码进行,说明运算效率高
         *  讲一个构造:
         *      BigInteger(String val)
         *  3个常量:
         *  static BigInteger ONE :常量1
         *  static BigInteger TEN :常量10
         *  static BigInteger ZERO :常量0
         *  一个方法:
         *      static valueOf(long val) 返回其值等于指定long值得BigInteger
         */
        public static void main(String[] args) {
            //这几个测试是为了检测超过int范围内,Integer不能在表示,更谈不上计算
            /*Integer i=new Integer(100);
            System.out.println(i);
            System.out.println(Integer.MAX_VALUE);
            Integer ii=new Integer("2147483647"); 
            System.out.println(ii);
            Integer iii=new Integer("2147483648");*/
            
            BigInteger bi=new BigInteger("2147483648");
            System.out.println(bi);//看出重写了toString()
        }
    
    }
    
    package com.BigInteger;
    
    import java.math.BigInteger;
    
    /*
     * 介绍几个常用方法,其他查看API
     * public BigInteger add(BigInteger val):加
     * public BigInteger subtract(BigInteger val):减
     * public BigInteger multiply(BigInteger val):乘
     * public BigInteger divide(BigInteger val):除
     * public BigInteger[] divideAndRemainder(BigInteger val) 商和摩的数组 
     */
    public class BigIntegerDemo2 {
        public static void main(String[] args) {
            BigInteger bi1=new BigInteger("100");
            BigInteger bi2=new BigInteger("50");
            System.out.println("add:"+bi1.add(bi2));
            System.out.println("subtract:"+bi1.subtract(bi2));
            System.out.println("multiply:"+bi1.multiply(bi2));
            System.out.println("divide:"+bi1.divide(bi2));
            System.out.println("divideAndRemaunder:"+bi1.divideAndRemainder(bi2)[0]+"	"+bi1.divideAndRemainder(bi2)[1]);
            
        }
    
    }
    View Code
  • 相关阅读:
    家庭记账本开发记录2
    家庭记账本开发记录1
    构建之法阅读笔记——具体职位、用户和行业篇
    构建之法阅读笔记——团队篇
    js学习17
    js学习15
    js学习14
    js学习13
    js学习12
    js学习11
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5565942.html
Copyright © 2011-2022 走看看