java:大数值

大数值

       如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的分类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。

       使用静态的valueOf方法可以将普通的数值转化为大数值:

        BigInteger x = BigInteger.valueOf(100);

       遗憾的是,不能使用人们熟悉的算数运算符(如:+和*)处理大数值。而需要使用大数值类中的add和multiply方法。

        BigInteger x = BigInteger.valueOf(100);
        BigInteger y = BigInteger.valueOf(200);
        //计算100*(200+300)的值
        BigInteger z = x.multiply(y.add(BigInteger.valueOf(300)));

        注意:与C++不同,java没有提供运算符重载功能。程序员无法重定义+和*运算符,使其应用于BigInteger类的add和multiply运算,java语言的设计者确实为字符串的连接重载了+运算符,但没有重载其他的运算符,也没有给java程序员在值机的类中重载运算符的机会!

        下面是一个简单的应用实例:假设你被邀请参加抽奖活动,并从390个可能的数值中抽取60个,这个程序将会得到中彩概率为:1/7163958434619957415116222540092933411717612789263493493351013459481104668848.

class Solution {
    public static void main(String[] args) {
    	Scanner in = new Scanner(System.in);
    	
    	System.out.print("How many numbers do you need to draw? ");
    	int k=in.nextInt();
    	
    	System.out.print("What is the highest number you can draw? ");
    	int n=in.nextInt();
    	
    	BigInteger lotterOdds = BigInteger.valueOf(1);
    	
    	for(int i=1;i<=k;i++) {
    		lotterOdds = lotterOdds.multiply(BigInteger.valueOf(n-i+1)).divide(BigInteger.valueOf(i));
    	}
    	
    	System.out.println("Your odds are 1 in "+lotterOdds + ". Good luck!");
    }
}

一些常用的API:

    	//返回这个大整数和另一个大正数other的和、差、积、商以及余数
    	BigInteger add(BigInteger other)
    	BigInteger substract(BigInteger other)
    	BigInteger multiply(BigInteger other)
    	BigInteger divide(BigInteger other)
    	BigInteger mod(BigInteger other)
    	
    	//如果这个大整数与另一个大整数other相等,返回0;
    	//小于另一个大整数other的话会发挥一个负数;否则返回正数。
    	int compareTo(BigInteger other)
    	
    	//返回值等于x的大整数
    	static BigInteger valueOf(long x)

浮点型大数值与整数型大数值API几乎一样。

唯一区别:要想计算商,必须给出舍入方式。RoundingMode.HALF_UP是在学校中学习的四舍五入方式。它使用与常规的运算。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值