java基础——大整数和大浮点数

Java中的整型int和浮点型float、double,他们存放数据的范围有限,当需要计算更大的数据是可以考虑用java.math.BigInteger和java.math.BigDecimal

BigInteger【任意精度的整数运算】

import java.util.*;
 
import java.math.*;
 
public class Main{
 
    public static void main(String args[]){
 
       Scanner cin = new Scanner(System.in);
 
       BigInteger a, b;
 
      
 
       //以文件EOF结束
 
       while (cin.hasNext()){
 
           a = cin.nextBigInteger();
 
           b = cin.nextBigInteger();
 
          
 
           System.out.println(a.add(b)); //大整数加法
 
           System.out.println(a.subtract(b)); //大整数减法
 
           System.out.println(a.multiply(b)); //大整数乘法
 
           System.out.println(a.divide(b)); //大整数除法(取整)
 
           System.out.println(a.remainder(b)); //大整数取模
 
          
 
           //大整数的比较
 
           if( a.compareTo(b) == 0 ) System.out.println("a == b"); //大整数a==b
 
           else if( a.compareTo(b) > 0 ) System.out.println("a > b"); //大整数a>b
 
           else if( a.compareTo(b) < 0 ) System.out.println("a < b"); //大整数a<b
 
          
 
           //大整数绝对值
 
           System.out.println(a.abs()); //大整数a的绝对值
 
          
 
           //大整数的幂
 
           int exponent=10;
 
           System.out.println(a.pow(exponent)); //大整数a的exponent次幂
 
          
 
           //返回大整数十进制的字符串表示
 
           System.out.println(a.toString());
 
          
 
           //返回大整数p进制的字符串表示
 
           int p=8;
 
           System.out.println(a.toString(p));
 
       }
 
    }
 
}
 
 

 

BigDecimal【任意精度的浮点数运算】

     /**
     * 提供精确的加法运算。
     * 
     * @param v1 被加数
     * @param v2 加数
     * @return 两个参数的和
     */
    public static double add(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();
    }
    
    //重载方法,v1,v2必须是可以转化为数字的字符串
    public static String add(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.add(b2).toString();
    }


 /**
     * 提供精确的减法运算。
     * 
     * @param v1 被减数
     * @param v2 减数
     * @return 两个参数的差
     */
    public static double sub(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();
    }
    
    public static String sub(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.subtract(b2).toString();
    }


 /**
     * 提供精确的乘法运算。
     * 
     * @param v1 被乘数
     * @param v2 乘数
     * @return 两个参数的积
     */
    public static double mul(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2).doubleValue();
    }
    
    public static String mul(String v1, String v2) {
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.multiply(b2).toString();
    }



     /**
     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后DEF_DIV_SCALE位,以后的数字四舍五入。
     * 
     * @param v1 被除数
     * @param v2 除数
     * @return 两个参数的商
     */
    public static double div(double v1, double v2) {
        return div(v1, v2, DEF_DIV_SCALE);
    }
    
    /**
     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
     * 
     * @param v1 被除数
     * @param v2 除数
     * @param scale 表示表示需要精确到小数点以后几位。
     * @return 两个参数的商
     */
    public static double div(double v1, double v2, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    
    public static String div(String v1, String v2) {
        return div(v1, v2, DEF_DIV_SCALE);
    }
    
    public static String div(String v1, String v2, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值