JavaSE - 包装类与数字处理类

JavaSE - 包装类与数字处理类

本节学习目标:

  • 了解基本类型的包装类;
  • 熟悉并掌握包装类的使用方法;
  • 了解数字的格式化方法;
  • 了解Math类与常用数学运算方法;
  • 了解并掌握随机数的使用与Random类;
  • 了解大数字运算。

1. 包装类

众所周知,Java语言中万物皆对象,在Java中,对象是程序执行的基本单元,但是基本数据类型变量却不是一个对象
为了能将基本数据类型视为对象进行处理,Java提供了基本数据类型(Primitive Type)的包装类(Wrapper Type):

基本数据类型对应的包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter

所有的包装类都位于java.lang包下,这意味着无需使用import关键字导入即可使用。

1.1 Integer 类

Integer类是基本数据类型int的包装类,包装类内部封装了一个int型成员变量value用来存储数据。

1. 构造方法

Integer类有两种构造方法:

  • Integer(int value):将提供的int类型参数包装为Integer对象。
Integer i = new Integer(7);
// 上面的等价于
Integer i = 7;
  • Integer(String s):使用parseInt()方法将数值型字符串转换为int类型参数,再包装为Integer对象。如果提供的字符串不是纯数值型,将抛出异常(NumberFormatException)。
Integer i = new Integer("872");
2. 常用方法

Integer类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Integer对象的字符串形式
static toString(int i)String返回int类型数值i字符串形式
static toHexString(int i)String返回int类型数值i十六进制字符串形式
static toOctalString(int i)String返回int类型数值i八进制字符串形式
static toBinaryString(int i)String返回int类型数值i二进制字符串形式
static parseInt(String s)int数值型字符串s解析为int类型数值
static valueOf(int i)Integerint类型数值i解析为Integer对象
static valueOf(String s)Integer数值型字符串s解析为Integer对象
compareTo(Integer anotherInteger)int将该Integer对象的值与另一个Integer对象anotherInteger的值比较,
两值相等返回0小于anotherInteger返回-1大于anotherInteger返回1
static compare(int x, int y)intint类型数值xy相互比较,xy相等返回0
x小于y返回-1x大于y返回1
static sum(int a, int b)int返回int类型数值ab相加的
static max(int a, int b)int返回int类型数值ab比较的较大值
static min(int a, int b)int返回int类型数值ab比较的较小值
3. 常量

Integer类提供以下静态常量可供使用:

静态常量类型说明
MIN_VALUEintint类型数值可表示的最小数0x80000000(-231
MAX_VALUEintint类型数值可表示的最大数0x7fffffff(231-1)
SIZEintint类型数值所占内存的位数32(4字节,32位)
TYPEClass<Integer>int类型对应的Class实例int

1.2 Byte 类

Byte类是基本数据类型byte的包装类,包装类内部封装了一个byte类型成员变量value用来存储数据。

1. 构造方法

Byte类有两种构造方法:

  • Byte(byte value):将提供的byte类型参数包装为Byte对象。
Byte b = new Byte(6);
// 上面的等价于
Byte b = 6;
  • Byte(String s):使用parseByte()方法将数值型字符串转换为byte类型参数,再包装为Byte对象。
Byte b = new Byte("110");
2. 常用方法

Byte类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Byte对象的字符串形式
static toString(byte b)String返回byte类型数值b字符串形式
static parseByte(String s)byte数值型字符串s解析为byte类型数值
static valueOf(byte b)Bytebyte类型数值b解析为Byte对象
static valueOf(String s)Byte数值型字符串s解析为Byte对象
compareTo(Byte anotherByte)int将该Byte对象的值与另一个Byte对象anotherByte的值比较,返回它们两个相减的差值
两者相等差值为0小于anotherByte差值为负数大于anotherByte差值为正数
static compare(byte x, byte y)intbyte类型数值xy相互比较,返回它们两个相减的差值
两者相等差值为0x小于y差值为负数x大于y差值为正数
3. 常量

Byte类提供以下静态常量可供使用:

静态常量类型说明
MIN_VALUEbytebyte类型数值可表示的最小数-128(-27
MAX_VALUEbytebyte类型数值可表示的最大数127(27-1)
SIZEintbyte类型数值所占内存的位数8(1字节,8位)
TYPEClass<Byte>byte类型对应的Class实例byte

1.3 Short 类

Short类是基本数据类型short的包装类,包装类内部封装了一个short类型成员变量value用来存储数据。

1. 构造方法

Short类有两种构造方法:

  • Short(short value):将提供的short类型参数包装为Short对象。
Short s = new Short(6);
// 上面的等价于
Short s = 6;
  • Short(String s):使用parseShort()方法将数值型字符串转换为short类型参数,再包装为Short对象。
Short s = new Short("785");
2. 常用方法

Short类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Short对象的字符串形式
static toString(short s)String返回short类型数值s字符串形式
static parseShort(String s)short数值型字符串s解析为short类型数值
static valueOf(short b)Shortshort类型数值b解析为Short对象
static valueOf(String s)Short数值型字符串s解析为Short对象
compareTo(Short anotherShort)int将该Short对象的值与另一个Short对象anotherShort的值比较,返回它们两个相减的差值
两者相等差值为0小于anotherShort差值为负数大于anotherShort差值为正数
static compare(short x, short y)intshort类型数值xy相互比较,返回它们两个相减的差值
两者相等差值为0x小于y差值为负数x大于y差值为正数
3. 常量

Short类提供以下静态常量可供使用:

静态常量类型说明
MIN_VALUEshortshort类型数值可表示的最小数-32768(-215
MAX_VALUEshortshort类型数值可表示的最大数32767(215-1)
SIZEintshort类型数值所占内存的位数16(2字节,16位)
TYPEClass<Short>short类型对应的Class实例short

1.4 Long 类

Long类是基本数据类型long的包装类,包装类内部封装了一个long类型成员变量value用来存储数据。

1. 构造方法

Long类有两种构造方法:

  • Long(long value):将提供的long类型参数包装为Long对象。
Long l = new Long(6L);
// 上面的等价于
Long l = 6;
  • Long(String s):使用parseLong()方法将数值型字符串转换为long类型参数,再包装为Long对象。
Long s = new Long("78547552");
2. 常用方法

Long类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Long对象的字符串形式
static toString(long l)String返回long类型数值l字符串形式
static toHexString(long l)String返回long类型数值l十六进制字符串形式
static toOctalString(long l)String返回long类型数值l八进制字符串形式
static toBinaryString(long l)String返回long类型数值l二进制字符串形式
static parseLong(String s)long数值型字符串s解析为long类型数值
static valueOf(long l)Longlong类型数值l解析为Long对象
static valueOf(String s)Long数值型字符串s解析为Long对象
compareTo(Long anotherLong)int将该Long对象的值与另一个Long对象anotherLong的值比较,
两值相等返回0小于anotherLong返回-1大于anotherLong返回1
static compare(long x, long y)intlong类型数值xy相互比较,xy相等返回0
x小于y返回-1x大于y返回1
static sum(long a, long b)long返回long类型数值ab相加的
static max(long a, long b)long返回long类型数值ab比较的较大值
static min(long a, long b)long返回long类型数值ab比较的较小值
3. 常量

Long类提供以下静态常量可供使用:

静态常量类型说明
MIN_VALUElonglong类型数值可表示的最小数0x8000000000000000L(-263
MAX_VALUElonglong类型数值可表示的最大数0x7fffffffffffffffL(263-1)
SIZEintlong类型数值所占内存的位数64(8字节,64位)
TYPEClass<Long>long类型对应的Class实例long

1.5 Float 类

Float类是基本数据类型float的包装类,包装类内部封装了一个float类型成员变量value用来存储数据。

1. 构造方法

Float类有三种构造方法:

  • Float(float value):将提供的float型参数包装为Float对象。
Float f = new Float(7.35F);
// 上面的等价于
Float f = 7.35F;
  • Float(double value):将提供的double型参数强转为float类型后包装为Float对象。
Float f = new Float(7.35);
// 上面的等价于
Float f = (float) 7.35;
  • Float(String s):使用parseFloat()方法将数值型字符串转换为float类型参数,再包装为Float对象。
Float f = new Float("7.35F");
Float f = new Float("7.35D")
// 上面的等价于
Float f = new Float("7.35")
2. 常用方法

Float类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Float对象的字符串形式
static toString(float f)String返回float类型数值f字符串形式
static toHexString(float f)String返回float类型数值f十六进制字符串形式
static parseFloat(String s)float数值型字符串s解析为float类型数值
static valueOf(float f)Floatfloat类型数值f解析为Float对象
static valueOf(String s)Float数值型字符串s解析为Float对象
compareTo(Float anotherFloat)int将该Float对象的值与另一个Float对象anotherFloat的值在数值上进行比较,
两值相等返回0小于anotherFloat返回-1大于anotherFloat返回1
static compare(float f1, float f2)intfloat类型数值f1f2数值上相互比较,
f1f2相等返回0f1小于f2返回-1f1大于f2返回1
static isNaN(float v)boolean判断float类型数值v是否为非数字返回true返回false
isNaN()boolean判断该Float对象的值是否为非数字返回true返回false
static isInfinite(float v)boolean判断float类型数值v数值上是否无限大返回true返回false
isInfinite()boolean判断该Float对象的值在数值上是否无限大返回true返回false
static isFinite(float v)boolean判断float类型数值v是否为有限浮点数返回true返回false
static sum(float a, float b)float返回float类型数值ab相加的
static max(float a, float b)float返回float类型数值ab比较的较大值
static min(float a, float b)float返回float类型数值ab比较的较小值
3. 常量

Float类提供以下静态常量可供使用:

静态常量类型说明
POSITIVE_INFINITYfloatfloat类型表示的正无穷大Infinity1.0F / 0.0F
NEGATIVE_INFINITYfloatfloat类型表示的负无穷大-Infinity-1.0F / 0.0F
NaNfloatfloat类型表示的非数字NaN0.0F / 0.0F
MAX_VALUEfloatfloat类型能表示的最大精度最大正数0x1.fffffeP+127f3.4028235E38,3.4×1038
MIN_VALUEfloatfloat类型能表示的最小精度最小正数0x0.000002P-126f1.4E-45,1.4×10-45
SIZEintfloat类型数值所占内存的位数32(4字节,32位)
TYPEClass<Float>float类型对应的Class实例float

1.6 Double 类

Double类是基本数据类型double的包装类,包装类内部封装了一个double类型成员变量value用来存储数据。

1. 构造方法

Double类有两种构造方法:

  • Double(double value):将提供的double类型参数包装为Double对象。
Double d = new Double(8.457);
// 上面的等价于
Double d = 8.457;
  • Double(String s):使用parseDouble()方法将数值型字符串s转换为double类型参数,再包装为Double对象。
Double d = new Double("8.457");
2. 常用方法

Double类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Double对象的字符串形式
static toString(double d)String返回double类型数值f字符串形式
static toHexString(double d)String返回double类型数值f十六进制字符串形式
static parseDouble(String s)double数值型字符串s解析为double类型数值
static valueOf(double d)Doubledouble类型数值d解析为Double对象
static valueOf(String s)Double数值型字符串s解析为Double对象
compareTo(Double anotherDouble)int将该Double对象的值与另一个Double对象anotherDouble的值在数值上进行比较,
两值相等返回0小于anotherDouble返回-1大于anotherDouble返回1
static compare(double d1, double d2)intdouble类型数值d1d2数值上相互比较,
d1d2相等返回0d1小于d2返回-1d1大于d2返回1
static isNaN(double v)boolean判断double类型数值v是否为非数字返回true返回false
isNaN()boolean判断该Double对象的值是否为非数字返回true返回false
static isInfinite(double v)boolean判断double类型数值v数值上是否无限大返回true返回false
isInfinite()boolean判断该Double对象的值在数值上是否无限大返回true返回false
static isFinite(double v)boolean判断double类型数值v是否为有限浮点数返回true返回false
static sum(double a, double b)double返回double类型数值ab相加的
static max(double a, double b)double返回double类型数值ab比较的较大值
static min(double a, double b)double返回double类型数值ab比较的较小值
3. 常量
静态常量类型说明
POSITIVE_INFINITYdoubledouble类型表示的正无穷大Infinity1.0 / 0.0
NEGATIVE_INFINITYdoubledouble类型表示的负无穷大-Infinity-1.0 / 0.0
NaNdoubledouble类型表示的非数字NaN0.0 / 0.0
MAX_VALUEdoubledouble类型能表示的最大精度最大正数0x1.fffffffffffffP+10231.7976931348623157E308,1.8×10308
MIN_VALUEdoubledouble类型能表示的最小精度最小正数0x0.0000000000001P-10224.9E-324,4.9×10-324
SIZEintdouble类型数值所占内存的位数64(8字节,64位)
TYPEClass<Double>double类型对应的Class实例double

1.7 Number 类

Number类是一个抽象类,它是BigDecimal(大数小数)、BigInteger(大数整数)、IntegerByteShortLongFloatDouble等类的父类。

Number类中有四个抽象方法和两个方法,这些方法分别被继承Number类的子类所实现:

方法返回值类型功能说明
abstract intValue()intint类型返回当前数值抽象方法,子类分别有此方法的实现
abstract longValue()longlong类型返回当前数值抽象方法,子类分别有此方法的实现
abstract floatValue()floatfloat类型返回当前数值抽象方法,子类分别有此方法的实现
abstract doubleValue()doubledouble类型返回当前数值抽象方法,子类分别有此方法的实现
byteValue()bytebyte类型返回当前数值默认实现为(byte)intValue()基本数值类型分别重写了该方法
shortValue()shortshort类型返回当前数值默认实现为(short)intValue()基本数值类型分别重写了该方法

1.8 Boolean 类

Boolean类是基本数据类型boolean的包装类,包装类内部封装了一个boolean类型成员变量value用来存储数据。

1. 构造方法

Boolean类有两种构造方法:

  • Boolean(boolean value):将提供的boolean类型参数包装为Boolean对象。
Boolean b = new Boolean(true);
// 上面的等价于
Boolean b = true;
  • Boolean(String s):使用parseBoolean()方法将字符串s转换为boolean类型参数,再包装为Boolean对象。
Boolean b = new Boolean("true");
2. 常用方法

Boolean类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Boolean对象的字符串形式
static toString(boolean b)String返回boolean类型参数b字符串形式
static parseBoolean(String s)boolean布尔型字符串s解析为boolean类型
"true"字符串(不区分大小写)都被解析为true,否则为false
static valueOf(boolean b)Booleanboolean类型参数b解析为Boolean对象
static valueOf(String s)Boolean布尔型字符串s解析为Boolean对象
static logicalAnd(boolean a, boolean b)boolean返回boolean类型参数ab逻辑与运算结果(a && b
static logicalOr(boolean a, boolean b)boolean返回boolean类型参数ab逻辑或运算结果( a || b
static logicalXor(boolean a, boolean b)boolean返回boolean类型参数ab逻辑异或运算结果(a ^ b
3. 常量

Boolean类提供了以下静态常量可供使用:

静态常量类型说明
TRUEBoolean布尔值true对应的Boolean对象new Boolean(true)
FALSEBoolean布尔值false对应的Boolean对象new Boolean(false)
TYPEClass(Boolean)boolean类型对应的Class实例boolean

1.9 Character 类

Character类是基本数据类型char的包装类,包装类内部封装了一个char类型成员变量value用来存储数据。

1. 构造方法

Character类只有一个构造方法:

  • Character(char value):将char类型参数包装为Character对象。
Character c = new Character('A');
// 上面的等价于
Character c = 'A';
2. 常用方法

Character类提供了很多常用的处理方法:

方法返回值类型功能
toString()String返回该Character对象的字符串形式
static toString(char c)String返回char类型字符c字符串形式
charValue()char返回该Character对象的值
static isLowerCase(char ch)boolean判断字符ch是否为小写字母
static isUpperCase(char ch)boolean判断字符ch是否为大写字母
static isSpaceChar(char ch)boolean判断字符ch是否为空格
static toLowerCase(char ch)char大写字母字符ch转换为小写字母
static toUpperCase(char ch)char小写字母字符ch转换为大写字母
3. 常量

Character类提供了很多常量,包括了很多特殊字符的unicode值。在此仅列出Character类属性相关的常量:

静态常量类型说明
MIN_VALUEcharchar类型表示的最小值'\u0000'
MAX_VALUEcharchar类型表示的最大值'\uffff'
SIZEintchar类型数值所占内存的位数16(2字节,16位)
TYPEClass<Character>char类型对应的Class实例char

1.10 自动装箱与拆箱

在JDK1.5版本新增了两个功能:自动装箱(Auto boxing)与自动拆箱(Auto Unboxing)。

  • 自动装箱:将一个基本数据类型变量赋值给它对应的包装类引用时,系统自动将它包装为对应的包装类对象来进行相关操作,即基本数据类型当成引用数据类型使用。
  • 自动拆箱:需要基本数据类型时,传入的是包装类的一个对象,则系统自动将包装类对象转换为对应的基本数据类型变量进行操作,即引用数据类型当成基本数据类型使用。

编写代码进行测试:

public class BoxingTest {
    public static void main(String[] args) {
        Integer i = 7; // 自动装箱
        int j = i;     // 自动拆箱
    }
}

使用JDK提供的反汇编工具javap.exe查看编译后的字节码文件,执行命令javap -c BoxingTest.class

javap反编译工具查看字节码文件

可以看到JVM执行main()方法时执行的指令:

  • 第3(2)条指令:执行静态方法(invokestatic),对应第3(#2)行源码,执行了java.lang.Integer类的valueOf(int)静态方法。
  • 第8(7)条指令:执行成员方法(invokevirtual),对应第4(#3)行源码,执行了java.lang.Integer类的intValue()成员方法。

所以JVM执行这两行语句时,自动替换成下列方法执行:

Integer i = Integer.valueOf(7);
int j = i.intValue();

从反编译得到的字节码内容可以看出,在进行装箱自动调用的是Integer类的valueOf(int)方法,进行拆箱自动调用的是Integer类的intValue()方法。

面试题:下面的语句输出结果为?

public class Test {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        Integer c = 200;
        Integer d = 200;
        System.out.println(a == b);
        System.out.println(c == d);
    }
}

// 运行结果
// true
// false

解析:Java自动装箱与自动拆箱(包装类) - CSDN/Loisy-M

2. 数字处理类

Java提供了多种数字处理类,如DecimalFormat类,Math类,Random类,BigInteger类与BigDecimal类等来处理数学问题,随机问题,商业货币问题,科学计数问题等实际问题。

2.1 数字格式化

Java对浮点型数据floatdouble)提供默认格式化

  • 数据绝对值大于0.001并且小于10000000,将以常规小数形式表示;
  • 数据绝对值小于0.001或者大于10000000,将以科学计数法表示。
double d1 = 9999999.0;
double d2 = 10000000.0;
System.out.println(d1);
System.out.println(d2);

// 运行结果
9999999.0
1.0E7

使用java.text包下的DecimalFormat类中的方法可以实现指定格式的格式化,如货币,商品价格等需要保留若干位小数保留若干位有效数字

DecimalFormat类是NumberFormat类的一个子类,用于格式化十进制数字。支持的格式化特殊字符:

特殊字符说明
0占位符0,如果该位不存在数字,使用数字0替代显示
#占位符#,如果该位存在数字,则显示。
.小数分隔符
-负号
,分组分隔符
E分割科学计数法中的尾数和指数
%放置在数字的前缀或后缀,将数字乘以100并显示为百分数
\u2030放置在数字的前缀或后缀,将数字乘以1000并显示为千分数
\u00A4放置在数字的前缀或后缀,作为货币记号
'如果想要上述符号当做普通符号使用,使用单引号即可

演示使用DecimalFormat类进行数字格式化:

import java.text.DecimalFormat;
public class FormatTest {
    public static void main(String[] args) {
        DecimalFormat formatter = new DecimalFormat();
        formatter.applyPattern("###,###.##");
        // 以上两行代码可以使用构造方法简化
        // DecimalFormat formatter = new DecimalFormat("###,###.##");
        String str = formatter.format(472416.15);
        System.out.println(str);
    }
}

// 运行结果
// 472,416.15

2.2 Math 类与数学运算

Math类位于java.lang包下,提供了数学运算中常用的静态常量静态方法

1. 常量
静态常量类型说明
Edouble自然常数e2.7182818284590452354
PIdouble圆周率π3.14159265358979323846
2. 三角函数方法
三角函数方法返回值类型功能
static sin(double a)double返回一个弧度a的三角正弦
static cos(double a)double返回一个弧度a的三角余弦
static tan(double a)double返回一个弧度a的三角正切
static asin(double a)double返回一个弧度a的三角反正弦
static acos(double a)double返回一个弧度a的三角反余弦
static atan(double a)double返回一个弧度a的三角反正切
static toRadians(double a)double角度a转换为弧度
static toDegrees(double a)double弧度a转换为角度
3. 指数函数方法
指数函数方法返回值类型功能
static exp(double a)double返回自然常数ea次方(即ea
static log(double a)double返回以自然常数e为底a对数(即logea,或lna)
static log10(double a)double返回以10为底a对数(即log10a,或lga)
static sqrt(double a)double返回a平方根(即√(a),且a不能为负数,否则返回NaN
static cbrt(double a)double返回a立方根(即3√(a))
static pow(double a, double b)double返回a的b次方(即ab
4. 取整函数方法
取整函数方法返回值类型功能
static ceil(double a)double返回大于等于a最小整数(即向上取整
static floor(double a)double返回小于a最大整数(即向下取整
static rint(double a)double返回与a最接近的整数
static round(float a)inta加上0.5后返回小于等于a最大整数(即四舍五入,结果为float型)
static round(double a)longa加上0.5后返回小于等于a最大整数(即四舍五入,结果为long型)
5. 最值与绝对值函数方法
最值与绝对值函数方法返回值类型功能
static max(double a, double b)double返回double型参数ab两者的最大值
static min(int a, int b)int返回int型参数ab两者的最小值
static min(long a, long b)long返回long型参数ab两者的最小值
static min(float a, float b)float返回float型参数ab两者的最小值
static min(double a, double b)double返回double型参数ab两者的最小值
static abs(int a)int返回int型参数a绝对值
static abs(long a)long返回long型参数a绝对值
static abs(float a)float返回float型参数a绝对值
static abs(double a)double返回double型参数a绝对值

2.3 随机数

随机数在数组的常用算法章节简单提到了,这里深入学习。

1. Math.random() 方法

Math类中的静态random()方法可用于产生随机数,默认生成大于等于0.0且小于1.0double型随机数,即0 <= Math.random() < 1,[0.0, 1.0)区间内的随机数。

为了能够使用此方法产生任意范围的随机数,可以使用两种方法:

  • (int) (Math.random() * n):产生[0, n)之间的随机整数;
  • m + (int) (Math.random() * (m - n)):产生[m, n)之间的随机整数。

编写代码进行测试:

import java.util.Arrays;
public class MathRandomTest {
    public static void main(String[] args) {
        int[] arr = randomGenerate(10, 50, 60);
        System.out.println(Arrays.toString(arr));
    }
    private static int[] randomGenerate(int length, int leftBound, int rightBound) {
        int[] arr = new int[length];
        for (int i = 0; i < length; i++) {
            arr[i] = leftBound + (int) (Math.random() * (rightBound - leftBound));
        }
        return arr;
    }
}

运行结果:

[55, 57, 57, 55, 54, 53, 59, 50, 51, 59]
2. Random 类

Random类位于java.util包下,是Java专门产生随机数处理随机数的工具类。

可以通过实例化一个Random对象创建一个随机数生成器:

  • Random():默认构造方法,使用系统当前时间作为随机数种子产生随机数。
  • Random(long seed):使用指定的随机数种子产生随机数。

Random类提供了很多产生随机数的方法:

方法返回值类型功能
nextInt()int产生一个int类型范围内的随机整数
nextInt(int n)int产生一个[0, n)区间内的随机整数
nextLong()long产生一个long类型范围内的随机整数
nextBoolean()boolean产生一个随机布尔值
nextFloat()float产生一个[0, 1)区间内的随机float浮点数
nextDouble()double产生一个[0, 1)区间内的随机double浮点数
nextGaussian()double产生一个概率密度满足高斯分布的的double浮点数

2.4 大数运算

Java提供了大数字的操作类,即BigIntegerBigDecimal,分别对整型大数浮点型大数进行操作。两者都位于java.math包下。

1. BigInteger 类

BigInteger类可以处理任意精度整数,可以表示任何大小整数值

常用的构造方法为BigInteger(String val),即使用数值型字符串表示值:

BigInteger bi = new BigInteger("1");

BigInteger类支持基本的数学运算和位运算:

方法返回值类型功能
add(BigInteger val)BigInteger加法运算
subtract(BigInteger val)BigInteger减法运算
multiply(BigInteger val)BigInteger乘法运算
divide(BigInteger val)BigInteger除法运算
remainder(BigInteger val)BigInteger取余运算
divideAndRemainder(BigInteger val)BigInteger[]返回余数和商,返回的数组中第一个元素第二个元素余数
pow(int exponent)BigInteger返回当前数的exponent次方的值
negate()BigInteger返回相反数
shiftLeft(int n)BigInteger按位左移,若为负数右移
shiftRight(int n)BigInteger按位右移,若为负数左移
and(BigInteger val)BigInteger按位与运算
or(BigInteger val)BigInteger按位或运算
compareTo(BigInteger val)int比较运算,当前数与参数相等返回0,当前数大于参数返回1,当前数小于参数返回-1
equals(Object x)boolean继承Object类的equals()方法,比较当前数与参数的值,相等返回true不相等返回false
min(BigInteger val)BigInteger返回较小值
max(BigInteger val)BigInteger返回较大值
2. BigDecimal 类

BigInteger类可以处理任意精度浮点数,可以表示任何大小浮点数值

常用的构造方法:

  • BigDecimal(double val):将double类型数值转换为BigDecimal对象。
  • BigDecimal(String val):将数值型字符串转换为BigDecimal对象。

简单介绍BigDecimal类的四则运算:

方法返回值类型功能
add(BigDecimal augend)BigDecimal加法运算
subtract(BigDecimal subtrahend)BigDecimal减法运算
multiply(BigDecimal multiplicand)BigDecimal乘法运算
divide(BigDecimal divisor, int scale, int roundingMode)BigDecimal除法运算,第一个参数为除数,第二个参数为保留的小数位数,第三个参数为BigDecimal类定义的常量,代表处理模式

divide()方法的第三个参数为BigDecimal类定义的静态常量,代表处理模式

roundingMode常量类型说明
ROUND_UPint商的最后一位如果大于0,则向前进位0
ROUND_DOWNint商的最后一位省略1
ROUND_CEILINGint商的如果是正数则按照ROUND_UP模式处理,如果为负数则按照ROUND_DOWN模式处理2
ROUND_FLOORintROUND_CEILING模式相反3
ROUND_HALF_UPint对商进行四舍五入操作,商的最后一位小于等于5则舍弃,大于5则进位4
ROUND_HALF_DOWNint对商进行四舍五入操作,商的最后一位小于5则舍弃,大于等于5则进位5
ROUND_HALF_EVENint如果商的倒数第二位为奇数则按照ROUND_HALF_UP模式处理,如果为偶数则按照ROUND_HALF_DOWN模式处理6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值