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 等