JAVA的两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,理论上能够表示无限大的数。
BigInteger表示:
package com.xujin; import java.util.*; import java.math.*; public class Test { public static void main(String[] args) { Scanner cin = new Scanner(System.in); //BigInteger类型的常量 BigInteger A = BigInteger.ONE; System.out.println("BigInteger.ONE的结果为 " + A);//1 BigInteger B = BigInteger.TEN; System.out.println("BigInteger.TEN的结果为 " + B);//10 BigInteger C = BigInteger.ZERO; System.out.println("BigInteger.ZERO的结果为 " + C);//0 //初始化 BigInteger c = new BigInteger("12345670",8);//c = 01234567890 ,八进制 System.out.println(c);//2739128 BigInteger d = BigInteger.valueOf(100);//d = 100 BigInteger e = new BigInteger(new byte[]{1,0});//00000001 00000000 System.out.println(e);//256 System.out.println(e.bitCount()); System.out.println(e.bitLength()); //运算 System.out.println("请输入大整数a,b"); while (cin.hasNext()) {//等同于!=EOF BigInteger a = cin.nextBigInteger(); BigInteger b = cin.nextBigInteger(); BigInteger c1 = a.add(b); // 大数加法 System.out.println("加的结果为 " + c1); BigInteger c2 = a.subtract(b); // 大数减法 System.out.println("减的结果为 " + c2); BigInteger c3 = a.multiply(b); // 大数乘法 System.out.println("乘的结果为 " + c3); BigInteger c4 = a.divide(b); // 大数除法 System.out.println("除的结果为 " + c4); BigInteger c5 = a.mod(b); System.out.println("模的结果为 " + c5); BigInteger cc5 = a.remainder(b); System.out.println("余的结果为 " + cc5); BigInteger c6 = a.max(b);// 取最大 System.out.println("最大为 " + c6); BigInteger c7 = a.min(b); // 取最小 System.out.println("最小为 " + c7); BigInteger c8 = a.pow(10); //指数运算 System.out.println("指数运算结果为" + c8); if (a.equals(b)) // 判断是否相等 System.out.println("相等"); else System.out.println("不相等"); BigInteger c10 = a.abs(); // 求绝对值 System.out.println("a的绝对值为 " + c10); BigInteger c11 = a.negate(); // 求相反数 System.out.println("a的相反数为 " + c11); } } }
BigDecimal表示:
//创建BigDecimal对象
BigDecimal bigNumber = new BigDecimal("89.1234567890123456789");
BigDecimal bigRate = new BigDecimal(1000);
BigDecimal bigResult = new BigDecimal(); //对象bigResult的值为0.0
注意,BigDecimal中的divide函数和BigInteger中的稍有不同。
方法1:
pubilc BigDecimal divide(BigDecimal divisor)
API中的解释: 返回一个 BigDecimal,其值为 (this / divisor),其首选标度为 (this.scale() - divisor.scale());如果无法表示准确的商值(因为它有无穷的十进制扩展),则抛出 ArithmeticException。
方法2:
pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
scale指的是小数点后的位数。比如123.456则scale就是3,是BigDecimal类中的方法啊。 比如:BigDecimal b = new BigDecimal("123.456");//b.scale(),返回的就是3.
roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段。
比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。
pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式,是四舍五入啊还是其它的,你可以自己选!
方法3:
pubilc BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
Fields | ||||
---|---|---|---|---|
final public static BigDecimal | ZERO
|
|||
final public static BigDecimal | ONE
|
|||
final public static BigDecimal | TEN
|
|||
final public static int | ROUND_UP
|
|||
final public static int | ROUND_DOWN
|
|||
final public static int | ROUND_CEILING
|
|||
final public static int | ROUND_FLOOR
|
|||
final public static int | ROUND_HALF_UP
|
|||
final public static int | ROUND_HALF_DOWN
|
|||
final public static int | ROUND_HALF_EVEN
|
|||
final public static int | ROUND_UNNECESSARY
|
与上面的大整数同样的函数:
package com.xujin; import java.util.*; import java.math.*; public class Test { public static void main(String[] args) { Scanner cin = new Scanner(System.in); //BigDecimal类型的常量 BigDecimal A = BigDecimal.ONE; System.out.println("BigDecimal.ONE的结果为 " + A);//1 BigDecimal B = BigDecimal.TEN; System.out.println("BigDecimal.TEN的结果为 " + B);//10 BigDecimal C = BigDecimal.ZERO; System.out.println("BigDecimal.ZERO的结果为 " + C);//0 //初始化 BigDecimal c = new BigDecimal("89.1234567890123456789"); BigDecimal d = new BigDecimal(100); BigDecimal e = new BigDecimal(new char[]{'2','1','.','2'}); System.out.println(e);//21.2 //运算 System.out.println("请输入大整数a,b"); while (cin.hasNext()) {//等同于!=EOF BigDecimal a = cin.nextBigDecimal(); BigDecimal b = cin.nextBigDecimal(); BigDecimal c1 = a.add(b); // 大数加法 System.out.println("加的结果为 " + c1); BigDecimal c2 = a.subtract(b); // 大数减法 System.out.println("减的结果为 " + c2); BigDecimal c3 = a.multiply(b); // 大数乘法 System.out.println("乘的结果为 " + c3); //注意,这里如果不能除尽,就会抛出一个ArithmeticException错误 BigDecimal c4 = a.divide(b); // 大数除法 System.out.println("除的结果为 " + c4); BigDecimal cc5 = a.remainder(b); System.out.println("余的结果为 " + cc5); BigDecimal c6 = a.max(b);// 取最大 System.out.println("最大为 " + c6); BigDecimal c7 = a.min(b); // 取最小 System.out.println("最小为 " + c7); BigDecimal c8 = a.pow(10); //指数运算 System.out.println("指数运算结果为" + c8); if (a.equals(b)) // 判断是否相等 System.out.println("相等"); else System.out.println("不相等"); BigDecimal c10 = a.abs(); // 求绝对值 System.out.println("a的绝对值为 " + c10); BigDecimal c11 = a.negate(); // 求相反数 System.out.println("a的相反数为 " + c11); } } }
实用格式转换:
参考资料:
java API http://doc.java.sun.com/DocWeb/api/java.math.BigDecimal
http://blog.163.com/wangyongfei_2008@yeah/blog/static/1722383292011535174177/
http://qingfengxia2.blog.163.com/blog/static/25478407201012442119977/
http://www.cnblogs.com/ffjjqqjj/archive/2011/07/14/2105893.html 等