java final bigd_java中的BigInteger类和BigDecimal类的应用

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

since

1.5

final public static BigDecimal

ONE

since

1.5

final public static BigDecimal

TEN

since

1.5

final public static int

ROUND_UP

final public static int

ROUND_DOWN

final public static int

ROUND_CEILING

BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。注意,此舍入模式始终不会减少计算值。

final public static int

ROUND_FLOOR

BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同。注意,此舍入模式始终不会增加计算值。

final public static int

ROUND_HALF_UP

ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。

final public static int

ROUND_HALF_DOWN

ROUND_UP相同;否则舍入行为与 ROUND_DOWN 相同。

final public static int

ROUND_HALF_EVEN

ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

final public static int

ROUND_UNNECESSARY

ArithmeticException。

与上面的大整数同样的函数:

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);

}

}

}

实用格式转换:

//去后缀0

BigDecimal bd = new BigDecimal("12000.87300");

bd = bd.stripTrailingZeros();

System.out.println(bd);

bd = new BigDecimal("1.2E-3");

// bd = new BigDecimal("1.2E+3");

//去科学记数

if(bd.scale()<0){

bd = bd.setScale(0);

}

System.out.println(bd);

//保留N位小数. N=5:

bd = new BigDecimal("12000.873000");

bd = bd.setScale(5, BigDecimal.ROUND_HALF_UP);

System.out.println(bd);

参考资料:

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  等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值