面试题之Java中的大数:BigInteger 和 BigDecimal

在Java中,如果基本的整数和浮点数精度不足以满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal.

这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal类实现任意精度的浮点数运算

关于BigInteger,有以下构造函数:

BigInteger(byte[] val)
//将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger。

BigInteger(int signum, byte[] magnitude)
//将BigInteger的符号大小表示形式转换为BigInteger。

BigInteger(int bitLength, int certainty, Random rnd)
//构造一个随机生成的正BigInteger,它可能是素数,具有指定的bitLength。

BigInteger(int numBits, Random rnd)
//构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。

BigInteger(String val)
//将BigInteger的十进制字符串表示形式转换为BigInteger。

BigInteger(String val, int radix)
//将指定基数中的BigInteger的String表示形式转换为BigInteger。

BigInteger还有一些常量:BigInteger.ZERO、BigInteger.ONE、BigInteger.TEN,Java9之后还增加了BigInteger.TWO。
BigInteger的构造函数并无特殊的地方,大家直接使用即可。

重点在于BigDecimal的构造函数:

BigDecimal有诸多构造函数,详情可以查看JavaAPI手册。但是,应当特别注意以下两个构造函数:

BigDecimal(double val);//该构造函数的结果可能有些不可预测,一般不推荐使用它

BigDecimal(String val);

我们知道,Java中的double是不精确的,如果使用一个不精确的数字来创建BigDecimal,那么得到的数字也是不精确的

例如,new BigDecimal(0.1) 会得到以下数位:

0.1000000000000000055511151231257827021181583404541015625

这是因为double自身表示的只是一个近似值。

而对于BigDecimal(String) 来说,当我们使用new BigDecimal("0.1")创建一个BigDecimal时,创建出来的值就是正好等于 0.1的。

另外,关于大数的运算,不能使用算术运算符(+、-、*、/);需要使用大数类中对应的方法。关于方法的详细描述,这里不再赘述,大家可自行查阅API文档。

如果你已经看到了这里,那可以麻烦点个赞么,笔者在这里先行谢过。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小挫折_仅此而已

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值