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
  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5565942.html
Copyright © 2011-2022 走看看