BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。
/* * 构造方法 */ public static void t1(){ BigDecimal bd1 = new BigDecimal(1);//value:1 scale:0 System.out.println("value:"+bd1+" scale:"+bd1.scale()); BigDecimal bd2 = new BigDecimal(1.23);//value:1.229999999999999982236431605997495353221893310546875 scale:51 System.out.println("value:"+bd2+" scale:"+bd2.scale()); BigDecimal bd3 = new BigDecimal("2.345");//value:2.345 scale:3 System.out.println("value:"+bd3+" scale:"+bd3.scale()); } /* * BigDecimal的值=unscaledValue × 10(-scale) * 非标度值 x10的负scale次方。 * 总结: * 非标度值为去掉小数点的值。 * scale为小数点后的位数。 */ public static void t2(){ //正整数 //输出值为:23245,scale为:0 //23245*10的负0次方=23245 //非标度值为23245 ,scale为0 BigDecimal bd1 = new BigDecimal("23245"); System.out.println("value:"+bd1+" scale:"+bd1.scale()); //负整数 //输出值为:-13435,scale为:0 //-13435*10的负0次方=-13435 //非标度值为-13435 ,scale为0 BigDecimal bg2=new BigDecimal("-13435"); System.out.println("输出值为:"+bg2+",scale为:"+bg2.scale()); } /* * 舍入模式 */ private static void t3(){ /** * setScale(int i):实际上舍入模式为ROUND_UNNECESSARY * 返回一个 BigDecimal,其标度为指定值,其值在数值上等于此 BigDecimal 的值。 * 如果这不可能,则抛出 ArithmeticException。 * 此调用通常用于增加标度,在这种情况下,可以保证存在指定标度和正确值的 BigDecimal。 * 如果调用方知道 BigDecimal在其小数部分的结尾有足够多的零(即其整数值中的十的因子), * 则该调用也可用于减少标度,以允许重新标度,而不更改其值。 */ BigDecimal bd1 = new BigDecimal("1.24"); BigDecimal bd2 = new BigDecimal("-0.02"); BigDecimal bd3 = new BigDecimal("1.26"); BigDecimal bd5 = bd1.setScale(5);//1.24000 System.out.println(bd5); /** * ROUND_UP:远离零的舍入模式,直接进位 * */ bd5 = bd1.setScale(1, BigDecimal.ROUND_UP);//1.3 System.out.println(bd5); /** * ROUND_DOWN:接近零的舍入模式,直接舍去 */ bd5 = bd1.setScale(1, BigDecimal.ROUND_DOWN);//1.2 System.out.println(bd5); /** * ROUND_CEILING: * 接近正无穷大的舍入模式。如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同; * 如果为负,则舍入行为与 ROUND_DOWN 相同。注意,此舍入模式始终不会减少计算值。 * */ bd5 = bd1.setScale(1, BigDecimal.ROUND_CEILING);//1.3 System.out.println(bd5); bd5 = bd2.setScale(1, BigDecimal.ROUND_CEILING);//0.0 System.out.println(bd5); /** * ROUND_HALF_UP * 4舍5入 */ bd5 = bd1.setScale(1, BigDecimal.ROUND_HALF_UP );//1.2 System.out.println(bd5); bd5 = bd3.setScale(1, BigDecimal.ROUND_HALF_UP );//1.3 System.out.println(bd5); //........ } /* * 加,减,乘,除 */ public static void t4(){ BigDecimal bd1 = new BigDecimal("12.1"); BigDecimal bd2 = new BigDecimal("3.4"); BigDecimal bd = bd1.add(bd2);//15.5 System.out.println(bd); bd = bd1.subtract(bd2);//8.7 System.out.println(bd); //除不尽的时候直接调用divide(BigDecimal divisor, int scale, int roundingMode) bd = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP);//3.56 System.out.println(bd); bd = bd1.multiply(bd2);//41.14 System.out.println(bd); }
BigInteger
public static void t1(){ int a = 1; BigInteger b1 = BigInteger.valueOf(a);//int long b = 2233; BigInteger b2 = BigInteger.valueOf(b);//long //构造函数 BigInteger b3 = new BigInteger("123432");//String } /* * 加减乘除等运算... */ public static void t2(){ BigInteger b1 = new BigInteger("2322323424345634522"); BigInteger b2 = new BigInteger("2324534534556"); BigInteger b; b = b1.add(b2);//加 System.out.println(b); b = b1.subtract(b2);//减 System.out.println(b); b = b1.multiply(b2);//乘 System.out.println(b); b = b1.divide(b2);//除 System.out.println(b); b = b1.pow(6);//a^b /* * gcd(); 最大公约数 * abs(); 绝对值 * negate();取反数 * .mod(); a.mod(b)=a%b=a.remainder(b); * max(); min(); * punlic int comareTo(); * boolean equals(); 是否相等 */ }