java BigInteger和BigDecimal类

BigInteger类  java.math.BigInteger

BigInteger类可以描述比long类型大的数据,可以解决数据溢出的问题,

不能使用+-*/这些运算符对BigInteger对象操作

构造方法(有好几个,只列举一个)

BigInteger(String val)传入的整形字符串

常用方法

valueOf(long val)初始化

add(BigInteger val)加

subtract(BigInteger val)减

multiply(BigInteger val)乘

divide(BigInteger val)

public BigInteger[] divideAndRemainder(BigInteger val)取商和余数,返回一个BigInteger数组,第一个元素保存商,第二个元素保存余数

import java.math.BigInteger;

public class BigIntegerAndBigDecimal {
	public static void main(String[] args) {
		//创建BigInteger对象,闯入字符串类型的整形
		BigInteger b1 = new BigInteger("200000000000000000001");
		//调用静态方法valueOf(long val),返回BigInteger类型对象
		BigInteger b2 = BigInteger.valueOf(58888888888888888L);
		//加
		System.out.println(b1.add(b2));
		//减
		System.out.println(b1.subtract(b2));
		//乘
		System.out.println(b1.multiply(b2));
		//除
		System.out.println(b1.divide(b2));
		//求商和余数,返回一个BigInteger数组,保存商和余数
		BigInteger[] b3 = b1.divideAndRemainder(b2);
		for (BigInteger i : b3) {
			System.out.println(i);
		}
	}
}
out:
200058888888888888889
199941111111111111113
11777777777777777600058888888888888888
3396
3396
13333333333336353

BigDecimal类 java.math.BigDecimal

BigDecimal 类则是针对很大的小数的处理类精度比较高,可以处理金融类业务,如果对计算的数据要求高精度时,必须使用BigDecimal类

构造方法很多,列举几个

BigDecimal(double val)//传入double类型的值,可能会损失精度,不允许使用

BigDecimal(String val)//将String类型转换成BigDecimal类型数据,推荐,这种构造方法是完全可预知的

public static BigDecimal valueOf(long val)这两个静态方法可以初始化BigDecimal对象,返回BigDecimal类型

public static BigDecimal valueOf(double val),valueOf(double val) 内部实现,仍是将 double 类型转为 String 类型;

类方法

.BigDecimal add(BigDecimal value):加,求两个BigDecimal类型数据的和。返回Bigdecimal类型

BigDecimal subtract(BigDecimal value):减,求两个BigDecimal类型数据的差。

BigDecimal multiply(BigDecimal  value):乘,求两个BigDecimal类型数据的积。

BigDecimal divide(BigDecimal divisor):除,求两个BigDecimal类型数据的商。

BigDecimal remainder(BigDecimal divisor):求余数,求BigDecimal类型数据除以divisor的余数。

BigDecimal max(BigDecimal value):最两个BigDecimal类型数据的最大值。

BigDecimal min(BigDecimal value):求两个BigDecimal类型数据的最小值。

BigDecimal abs():求绝对值,求BigDecimal类型数据的绝对值。

BigDecimal negate():求相反数,求BigDecimal类型数据的相反数
例子:

import java.math.BigDecimal;

public class BigDecimalTest01 {
	public static void main(String[] args) {
		double d1 = 2.0;
		double d2 = 1.1;
		System.out.println(d1 - d2);//0.8999999999999999
		//BigDecimal(double val)这种构造方式可能会损失精度
		BigDecimal b1 = new BigDecimal(2.0);
		BigDecimal b2 = new BigDecimal(1.1);
		////0.899999999999999911182158029987476766109466552734375
		System.out.println(b1.subtract(b2));
		//以下两种方式不会损失精度
		BigDecimal b3 = new BigDecimal("2.0");
		BigDecimal b4 = BigDecimal.valueOf(1.1);
		System.out.println(b3.subtract(b4));//0.9
	}
}
out:
0.8999999999999999
0.899999999999999911182158029987476766109466552734375
0.9

DecimalFormat类 java.text.DecimalFormat,继承自抽象类NumberFormat

NumberFormat类的方法

public static final NumberFormat getCurrencyInstance(),静态方法,建立一个NumberFormat类的对象并返回引用,该引用指定货币格式为系统预设的货币格式,缺省时,返回的是当地的货币格式

String format(double number)格式化数据,返回字符串类型

DecimalFormat类的构造方法,列举一个

public DecimalFormat(String pattern)//传入字符串类型的格式(要格式化成的样式)

public class DecimalFormatTest {
	public static void main(String[] args) {
		// 获取父类的实例,格式化123456
		String s1 = DecimalFormat.getCurrencyInstance().format(123456);
		System.out.println(s1);
		// 创建DecimalFormat对象,传入 要数字格式化成的样子
		DecimalFormat d1 = new DecimalFormat("###,###,###,###.0000");
		// 格式化数字成指定的形式,DecilmalFormat类没有format(double number)方法,
                     则调用父类的该同名方法
		String s2 = d1.format(123456);// 123,456,0000
		System.out.println(s2);

		String s3 = d1.format(123.456);//"123,4560"
		System.out.println(s3);
		DecimalFormat d2 = new DecimalFormat("##,###.00");
		String s4 = d2.format(654987123456.789);// 6549,8712,3456.79
		System.out.println(s4);
	}
}
out:
¥123,456.00
123,456.0000
123.4560
6549,8712,3456.79

  # 和 0 两种占位符号来指定数字长度。0 表示如果位数不足则以 0 填充,如果尾数多余0的个数最后一位四舍五入,

# 表示指定位置不存在数字,则不显示,如果数字长度大于#的个数,就按照#号设置的位数将多的数显示出来。

猜你喜欢

转载自blog.csdn.net/sinat_41132860/article/details/84030430