zoukankan      html  css  js  c++  java
  • 大数字运算——2、BigDecimal

    package com.wh.BigInteger;
    
    import java.math.BigDecimal;
    import java.util.Arrays;
    
    /**
     * @author 王恒
     * @datetime 2017年4月6日 下午3:08:18
     * @description  大数字运算
     * 
     */
    public class TestBigDecimal {
    	public static void main(String[] args) {
    		BigDecimal b1 = new BigDecimal("11111111111111111111111111111");
    		BigDecimal b2 = new BigDecimal("22222222222222222222222222222");
    		BigDecimal b3 = new BigDecimal("1000");
    		
    		//相加
    		System.out.println(b1.add(b2));  
    		//减去
    		System.out.println(b1.subtract(b2));
    		//相乘
    		System.out.println(b1.multiply(b2));
    		//相除
    		System.out.println(b2.divide(b3)); 
    		System.out.println(b2.divide(b3,1,BigDecimal.ROUND_UP)); 
    		System.out.println(b2.divide(b3,2,BigDecimal.ROUND_DOWN)); 
    		System.out.println(b2.divide(b3,2,BigDecimal.ROUND_CEILING)); 
    		//取余
    		System.out.println("remainder:   "+b2.remainder(b3));   
    		
    		/**
    		 * divide(BigDecimal divisor, int scale,int roundingMode)    scale:保留小数位数        roundingMode:舍入模式
    		 * 包括
    		 * 
    		 * ROUND_UP:舍入远离零的舍入模式。在丢弃非零部分之前始终增加数字。注意,此舍入模式始终不会减少计算值的大小。 (向上增加)
    		 * ROUND_DOWN:接近零的舍入模式。在丢弃某部分之前始终不增加数字(即截短)。注意,此舍入模式始终不会增加计算值的大小。(向下减少	)
    		 * 
    		 * ROUND_CEILING:接近正无穷大的舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。注意,此舍入模式始终不会减少计算值。 (联想到天花板)
    		 * ROUND_FLOOR:接近负无穷大的舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同。注意,此舍入模式始终不会增加计算值。(联想到地板)
    		 * 
    		 * ROUND_HALF_UP:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。 
    		 * ROUND_HALF_DOWN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。
    		 * ROUND_HALF_EVEN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。 
    		 * 
    		 * 
    		*/
    		
    		//compareTo     将此 BigDecimal 与指定的 BigDecimal 比较。
    		System.out.println("compareTo()  "+b1.compareTo(b2));
    		
    		//divideAndRemainder
    		System.out.println("divideAndRemainder()  "+Arrays.toString(b1.divideAndRemainder(b2)));
    		
    		//doubleValue()   将此 BigDecimal 转换为 double
    		System.out.println(b2.doubleValue());
    		
    		//max、min、toBigInteger、valueOf、toString、pow、negate
    	}
    }
    
    
    运行结果:
    
    33333333333333333333333333333
    -11111111111111111111111111111
    246913580246913580246913580241975308641975308641975308642
    22222222222222222222222222.222
    22222222222222222222222222.3
    22222222222222222222222222.22
    22222222222222222222222222.23
    remainder:   222
    compareTo()  -1
    divideAndRemainder()  [0, 11111111111111111111111111111]
    2.2222222222222224E28
    

      

  • 相关阅读:
    java学习 接口与继承11 默认方法
    java学习 接口与继承10 内部类
    java学习 接口与继承9 抽象类
    java学习 接口与继承8 final
    理解管理信息系统
    vue中的错误日志
    vue中的ref属性
    2.有24颗外观完全一样的小球,其中有一个是空心的,现在只有一个天平,最少称几次能找出这个特殊的球?
    1.有888瓶编了号码的水及10只健康的小白鼠,其中一瓶水有毒,小白鼠饮用毒水一天后会死,最少需要几天可以找到哪瓶水有毒?
    SQL题1两表联查
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/6673944.html
Copyright © 2011-2022 走看看