【java基础】大数据的处理:java.math.Number/BigInteger/BigDecimal

public abstract class Number extends Object implements Serializable

抽象类Number是BigDecimal、BigInteger、Byte、Double、Float、Integer、Long和Short类的超类。

Number的子类必须提供将表示的数值转换为byte、double、float、int、long和short的方法。

  • BigInteger   不可变的任意精度的整数。 此类的用法比较简单些,也不存在舍入等操作。
    public class BigInteger extends Number implements Comparable<BigInteger>
    通过代码进行分析:
package newTest;

import java.math.BigInteger;
import java.util.Random;

public class TestBigInteger {
	public static void main(String[] args) {
		System.out
				.println("-------------------构造BigInteger---------------------");
		// 通过byte数组来创建BigInteger
		BigInteger bi1 = new BigInteger(new byte[] { 1, 1 });
		System.out.println("bi1=" + bi1.toString());
		// 创建带符号的BigInteger
		BigInteger bi2 = new BigInteger(-1, new byte[] { 1, 1 });
		System.out.println("bi2=" + bi2.toString());
		// 创建带符号的BigInteger随机数
		BigInteger bi3 = new BigInteger(128, 20, new Random());
		System.out.println("bi3=" + bi3.toString());
		// 通过10进制字符串创建带符号的BigInteger
		BigInteger bi4 = new BigInteger("12342342342342123423423412341");
		System.out.println("bi4=" + bi4.toString());
		// 通过10进制字符串创建带符号的BigInteger
		BigInteger bi5 = new BigInteger("88888888888888888888888888888",
				Character.digit('a', 33));
		System.out.println("bi5=" + bi5.toString());
		System.out.println("BigInteger的常量:");
		System.out.println("BigInteger.ZERO=" + BigInteger.ZERO);
		System.out.println("BigInteger.ONE=" + BigInteger.ONE);
		System.out.println("BigInteger.TEN=" + BigInteger.TEN);

		System.out.println("-------------------使用BigInteger---------------------");
		System.out.println("bi1的相反数=" + bi1.negate());
		System.out.println("bi1+bi2=" + bi1.add(bi2));
		System.out.println("bi1-bi2=" + bi1.subtract(bi2));
		System.out.println("bi1*bi2=" + bi1.multiply(bi2));
		System.out.println("bi1/bi2=" + bi1.divide(bi2));
		System.out.println("bi1的10次方=" + bi1.pow(10));
		System.out.println("bi1的10次方=" + bi1.pow(1));
		BigInteger[] bx = bi4.divideAndRemainder(bi1);
		System.out.println(">>>:bx[0]=" + bx[0] + ",bx[1]=" + bx[1]);
		System.out.println("bi2的绝对值=" + bi2.abs());
	}
}
执行结果:

-------------------构造BigInteger---------------------
bi1=257
bi2=-257
bi3=283850198491080836133123474213387850343
bi4=12342342342342123423423412341
bi5=88888888888888888888888888888
BigInteger的常量:
BigInteger.ZERO=0
BigInteger.ONE=1
BigInteger.TEN=10
-------------------使用BigInteger---------------------
bi1的相反数=-257
bi1+bi2=0
bi1-bi2=514
bi1*bi2=-66049
bi1/bi2=-1
bi1的10次方=1256988294225653106805249
bi1的10次方=257
>>>:bx[0]=48024678374872075577523005,bx[1]=56
bi2的绝对值=257

  • BigDecimal  不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。可处理float类型的数据加减乘除有误差的问题。
public class BigDecimal extends Number implements Comparable<BigDecimal>
通过代码进行分析:

package newTest;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;

public class TestBigDecimal {

	public static void main(String[] args) {
		System.out.println("------------构造BigDecimal-------------");
		// 从char[]数组来创建BigDecimal
		BigDecimal bd1 = new BigDecimal("123456789.123456888".toCharArray(), 4,12);
		System.out.println("bd1=" + bd1);
		// 从char[]数组来创建BigDecimal
		BigDecimal bd2 = new BigDecimal("123456789.123456111133333213"
				.toCharArray(), 4, 18, MathContext.DECIMAL128);
		System.out.println("bd2=" + bd2);
		// 从字符串创建BigDecimal
		BigDecimal bd3 = new BigDecimal("123456789.123456111133333213");
		System.out.println("bd3=" + bd3);
		// 从字符串创建BigDecimal,3是有效数字个数
		BigDecimal bd4 = new BigDecimal("88.456", new MathContext(3,
				RoundingMode.UP));
		System.out.println("bd4=" + bd4);
		System.out.println("------------使用BigDecimal-------------");
		System.out.println("bd1+bd2=" + bd1.add(bd2));
		System.out.println("bd1+bd2="+ bd1.add(bd2, new MathContext(24, RoundingMode.UP)));
		System.out.println("bd1-bd2=" + bd1.subtract(bd2).toPlainString());
		System.out.println("bd1-bd2="+ bd1.subtract(bd2, new MathContext(24, RoundingMode.UP)).toPlainString());
		System.out.println("bd1*bd2=" + bd1.multiply(bd2));
		System.out.println("bd1*bd2="+ bd1.multiply(bd2, new MathContext(24, RoundingMode.UP)));
		System.out.println("bd1/bd4=" + bd1.divideToIntegralValue(bd4));
		System.out.println("bd1/bd4="+ bd1.divideToIntegralValue(bd4, new MathContext(24,RoundingMode.UP)));
		System.out.println("bd1末位数据精度=" + bd1.ulp());
		System.out.println("bd2末位数据精度=" + bd2.ulp());
		System.out.println("bd2末位数据精度=" + bd2.ulp().toPlainString());
		System.out.println("bd1符号:" + bd1.signum());
		System.out.println("bd4的标度:" + bd4.scale());
	}
}
执行结果:

------------构造BigDecimal-------------
bd1=56789.123456
bd2=56789.123456111133
bd3=123456789.123456111133333213
bd4=88.5
------------使用BigDecimal-------------
bd1+bd2=113578.246912111133
bd1+bd2=113578.246912111133
bd1-bd2=-0.000000111133
bd1-bd2=-0.000000111133
bd1*bd2=3225004542.907120529593035648
bd1*bd2=3225004542.90712052959304
bd1/bd4=641.00000
bd1/bd4=641.00000
bd1末位数据精度=0.000001
bd2末位数据精度=1E-12
bd2末位数据精度=0.000000000001
bd1符号:1
bd4的标度:1



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值