Java学习笔记(七)

Java的大数值

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

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

BigInteger a = BigInteger.valueOf(100);

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

BigInteger c = a.add(b); // c = a + b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)); // d = c * (b + 2)

注释: 与 C++ 不同,Java 没有提供运算符重载功能。程序员无法重定义 + 和 * 运算符,使其应用于 BigInteger 类的 addmultiply 运算。

下面这个程序是对中彩概率程序的改进,使其可以采用大数值进行运算。即,将计算语句:

for(int i = 1; i <= k; i++){
    lotteryOdds = lotteryOdds * (n - i + 1) / i;
}

改为大数值:

import java.math.*;

BigInerger lotteryOdds = BigInerger.valueOf(1);

for(int i = 1; i <= k; i++){
    lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1)).divide(BigInerger.valueOf(i));
}

其余内容请参考 API 文档,点击 这儿


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值