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