Java---java.math包中Big系列

71 篇文章 0 订阅
35 篇文章 0 订阅

玩转大数(BigInteger):

     1.基本数据类型的值要转换成大数(经常会用到),用下面两种方法
        1)构造方法
        2)valueOf()方法
     2.加、减、乘、除、取模等常用数学运算全部用函数来实现,不能数学用运算符。   并且一般的函数参数都是大数对象,不能用数值,也不能用整数及包装类变量。  还要注意,一般的函数在进行大数运算时,不是原地修改,而是返回修改结果。

     3.每个大数变量是一个BigInteger类型的对象,不是普通变量,也不是一个数值

import java.math.BigInteger;

import org.junit.Test;
/**
 * Time:2018/4/5
 * Description:学习BigInteger类
 * @author 宋进宇
 */
public class BigIntegerDemo {
	@Test
	public void test1(){
		long l = factorial(50);
		System.out.println(l);
		//-3258495067890909184 输出结果为负数,说明结果超过long型值的范围
	}
	/**
	 * 基本数据类型求阶乘i!
	 * @param i-阶乘因子
	 * @return 阶乘结果
	 */
	private long factorial(int i) {
		long l=1;
		for (int j = 2; j <= i; j++) {
			l*=j;
		}
		return l;
	}
	
	@Test
	public void test2(){
		BigInteger bi = factorial2(50);
		System.out.println(bi);
		//30414093201713378043612608166064768844377641568960512000000000000
		//结果正确
	}
	/**
	 * BigInteger求阶乘i!
	 * @param i-阶乘因子
	 * @return 阶乘结果
	 */
	private BigInteger factorial2(int i) {
		BigInteger bi = BigInteger.ONE;
		for (int j = 2; j <= i; j++) {
			bi = bi.multiply(BigInteger.valueOf(j));
		}
		return bi;
	}
}

玩转BigDecimal:

BigDecimal的用法和BigInteger非常类似,因为都是大数。 因此也没有普通的数学运算符操作(+,-,*,/,%),所有这些操作都是通过函数来实现的,并且一般的函数参数也都是大数(BigDecimal或BigInteger对象)

import java.math.BigDecimal;

import org.junit.Test;

/**
 * Time:2018/4/5
 * Description:BigDecimal类的学习
 * @author 宋进宇
 */
public class BigDecimalDemo {
	@Test
	public void test1(){
		double sum = 0.0;
		for (int i = 0; i < 10; i++) {
			sum+=0.1;
		}
		System.out.println(sum);
		//结果为0.9999999999999999
		//按常理来说结果应该为1.0,但是由于浮点数运算结果有时会是近似值,
		//有时会是正确值,比如当i等于5是结果为:0.5是想要的结果。
		//因此我们可以采用BigDecimal来进行处理,它可以精确计算
	}
	@Test
	public void test2(){
		BigDecimal bd = new BigDecimal(0);
		for (int i = 0; i < 10; i++) {
			bd = bd.add(BigDecimal.valueOf(0.1));
			//bd = bd.add(new BigDecimal(0.1));
		}
		System.out.println(bd);
		//结果为1.0是我们想要的结果
		//但是要注意,使用BigDecimal时,add()方法里面的参数应该用BigDecimal.valueOf(0.1)
		//如果参数用new BigDecimal(0.1)会出现
		//1.0000000000000000555111512312578270211815834045410156250
		//所以使用BigDecimal进行运算时,参数用BigDecimal.valueOf(0.1)这种方式。
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值