概述
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的个数最后一位四舍五入,
# 表示指定位置不存在数字,则不显示,如果数字长度大于#的个数,就按照#号设置的位数将多的数显示出来。
最后
以上就是可耐便当为你收集整理的java BigInteger和BigDecimal类的全部内容,希望文章能够帮你解决java BigInteger和BigDecimal类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复