Java – 高精度
BigInteger实现高精度整数计算
import java.math.BigInteger;
public class Main
{
public static void main(String[] args)
{
BigInteger a = new BigInteger("1");
BigInteger b = new BigInteger("2");
BigInteger c = new BigInteger("3");
c = a.add(b); //相加
System.out.println("c = a + b, c = " + c);
c = a.subtract(b); //相减
System.out.println("c = a - b, c = " + c);
c = a.multiply(b); //相乘
System.out.println("c = a * b, c = " + c);
c = a.divide(b); //相除取整
System.out.println("c = a / b, c = " + c);
c = a.remainder(b); //取余
System.out.println("c = a % b, c = " + c);
}
}
结果如下:
c = a + b, c = 3
c = a - b, c = -1
c = a * b, c = 2
c = a / b, c = 0
c = a % b, c = 1
BigDecimal实现高精度浮点数计算
import java.math.BigDecimal;
public class Main
{
public static void main(String[] args)
{
Scanner sca = new Scanner(System.in);
BigDecimal a = new BigDecimal("1.23");
BigDecimal b = new BigDecimal("2.34");
BigDecimal c = new BigDecimal("3.33");
c = a.add(b); //加法
System.out.println("c = a + b, c = " + c);
c = a.subtract(b); //减法
System.out.println("c = a - b, c = " + c);
c = a.multiply(b); //乘法
System.out.println("c = a * b, c = " + c);
c = a.divide(b, 3, BigDecimal.ROUND_UP); //除法
System.out.println("c = a / b, c = " + c);
c = a.subtract(b).abs(); //绝对值
System.out.println("c = |a - b|, c = " + c);
}
}
结果如下:
c = a + b, c = 3.57
c = a - b, c = -1.11
c = a * b, c = 2.8782
c = a / b, c = 0.526
c = |a - b|, c = 1.11
特别注意:divide()除法如果只有BigDecimal参数可能会报错。
divide(BigDecimal divisor 除数, int scale 精确小数位, int roundingMode 舍入模式)
一共八种舍入模式
(1)ROUND_UP
远离零的舍入模式
例:1 / 3 = 0.334
(2)ROUND_DOWN
接近零的舍入模式
例:1 / 3 = 0.333
(3)ROUND_CEILING
接近正无穷大的舍入模式
例:1 / 3 = 0.334
-1 / 3 = -0.333
(4)ROUND_FLOOR
接近负无穷大的舍入模式
例:1 / 3 = 0.333
-1 / 3 = -0.334
(5)ROUND_HALF_UP
四舍五入
例:1.225 => 1.23
(6)ROUND_HELF_DOWN
五舍六入
例:1.336 => 1.34
(7)ROUND_HALF_EVEN
如果舍弃部分左边的数字为奇数,则四舍五入;
如果舍弃部分左边的数字为偶数,则五舍六入;
例:1.115 => 1.12
1.225 => 1.22
1.226 => 1.23
(8)ROUND_UNNECESSARY
舍入模式可以断言所请求的操作具有准确的结果,因此不需要舍入。
如果结果为无限小数情况下会抛出异常。
初始化参数建议字符串;
参与BigInteger运算的变量必须全部是BigInteger类型,如果初始化过多的BigInteger变量将影响到时间效率,尽可能重复利用BigInteger变量。