【JavaSE】Java高精度计算类:BigInteger和BigDecimal

Java提供了两个用于高精度计算的类:BigInteger和BigDecimal,这两个类都在java.math包下。

BigInteger

BigInteger表示不可变的任意精度的整数。

BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。 

有两个重要的构造方法:

1.BigInteger(String val) 

将 BigInteger 的十进制字符串表示形式转换为 BigInteger。

2.BigInteger(String val, int radix) 

将指定基数(进制)的 BigInteger 的字符串表示形式转换为 BigInteger。

System.out.println(new BigInteger("110", 2));
System.out.println(new BigInteger("110", 8));
System.out.println(new BigInteger("110", 10));
System.out.println(new BigInteger("110", 16));
结果:
6
72
110
272
注意,如下语句会抛出错误:
new BigInteger("120", 2);
结果:
Exception in thread "main" java.lang.NumberFormatException: For input string: "120"
原因是二进制数不包括数字2。

基数radix的取值范围为[Character.MIN_RADIX, Character.MAX_RADIX],也即[2, 36]。

BigDecimal

BigDecimal表示不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。 
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。 

BigDecimal指定了八种舍入模式(RoundingMode):

public final static int ROUND_UP =           0;
public final static int ROUND_DOWN =         1;
public final static int ROUND_CEILING =      2;
public final static int ROUND_FLOOR =        3;
public final static int ROUND_HALF_UP =      4;
public final static int ROUND_HALF_DOWN =    5;
public final static int ROUND_HALF_EVEN =    6;
public final static int ROUND_UNNECESSARY =  7;

关于每种模式的意义请见博文【Java中BigDecimal的8种舍入模式】。

示例:

MathContext context = new MathContext(6, RoundingMode.HALF_UP);
System.out.println(new BigDecimal(110));
System.out.println(new BigDecimal(110.11, context));
System.out.println(BigDecimal.TEN.divide(new BigDecimal("3"), 2,
		RoundingMode.HALF_UP));
结果:
110
110.110
3.33
BigDecimal中定义的舍入模式已过时,Java推荐使用枚举类型RoundingMode。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值