Java Number & Math 类

本文介绍了Java中Number和Math类的基本概念与使用方法,包括Number类及其子类的特性、Math类提供的数学运算功能、数字格式化技巧及大数字运算处理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Number & Math 类

一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。

实例

int a = 5000 ;
float b = 13 .65 f ;
byte c = 0x4a ;

然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

Java Number类

这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。

下面是一个使用 Integer 对象的实例:(装箱与拆箱)

Test.java 文件代码:

public class Test {
    public static void main ( String args [ ] ) {
        Integer x = 5 ; // boxes int to an Integer object
        x = x + 10 ;   // unboxes the Integer to a int
        System . out . println ( x ) ;
    }
}

以上实例编译运行结果如下:

15

当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。


Java Math 类

Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

Test.java 文件代码:

public class Test {
    public static void main ( String [ ] args ) {
        System . out . println ( " 90 度的正弦值: " + Math . sin ( Math . PI / 2 ) ) ;
        System . out . println ( " 0度的余弦值: " + Math . cos ( 0 ) ) ;
        System . out . println ( " 60度的正切值: " + Math . tan ( Math . PI / 3 ) ) ;
        System . out . println ( " 1的反正切值: " + Math . atan ( 1 ) ) ;
        System . out . println ( " π/2的角度值: " + Math . toDegrees ( Math . PI / 2 ) ) ;
        System . out . println ( Math . PI ) ;
    }
}

以上实例编译运行结果如下:

90 度的正弦值:1.0
0度的余弦值:1.0
60度的正切值:1.7320508075688767
1的反正切值: 0.7853981633974483
π/2的角度值:90.0
3.141592653589793

Number & Math 类方法

下面的表中列出的是 Number & Math 类常用的一些方法:

序号方法与描述
1xxxValue()
将 Number 对象转换为xxx数据类型的值并返回。
2compareTo()
将number对象与参数比较。
3equals()
判断number对象是否与参数相等。
4valueOf()
返回一个 Number 对象指定的内置数据类型
5toString()
以字符串形式返回值。
6parseInt()
将字符串解析为int类型。
7abs()
返回参数的绝对值。
8ceil()
返回大于等于( >= )给定参数的的最小整数。
9floor()
返回小于等于(<=)给定参数的最大整数 。
10rint()
返回与参数最接近的整数。返回类型为double。
11round()
它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。
12min()
返回两个参数中的最小值。
13max()
返回两个参数中的最大值。
14exp()
返回自然数底数e的参数次方。
15log()
返回参数的自然数底数的对数值。
16pow()
返回第一个参数的第二个参数次方。
17sqrt()
求参数的算术平方根。
18sin()
求指定double类型参数的正弦值。
19cos()
求指定double类型参数的余弦值。
20tan()
求指定double类型参数的正切值。
21asin()
求指定double类型参数的反正弦值。
22acos()
求指定double类型参数的反余弦值。
23atan()
求指定double类型参数的反正切值。
24atan2()
将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。
25toDegrees()
将参数转化为角度。
26toRadians()
将角度转换为弧度。
27random()
返回一个随机数。

Math 的 floor,round 和 ceil 方法实例比较

参数Math.floorMath.roundMath.ceil
1.4112
1.5122
1.6122
-1.4-2-1-1
-1.5-2-1-1
-1.6-2-2-1

floor,round 和 ceil 实例:

public class Main {
    public static void main ( String [ ] args ) {
        double [ ] nums = { 1 .4 , 1 .5 , 1 .6 , - 1 .4 , - 1 .5 , - 1 .6 } ;
        for ( double num : nums ) {
            test ( num ) ;
        }
    }
    private static void test ( double num ) {
        System . out . println ( " Math.floor( " + num + " )= " + Math . floor ( num ) ) ;
        System . out . println ( " Math.round( " + num + " )= " + Math . round ( num ) ) ;
        System . out . println ( " Math.ceil( " + num + " )= " + Math . ceil ( num ) ) ;
    }
}

以上实例执行输出结果为:

Math.floor(1.4)=1.0
Math.round(1.4)=1
Math.ceil(1.4)=2.0
Math.floor(1.5)=1.0
Math.round(1.5)=2
Math.ceil(1.5)=2.0
Math.floor(1.6)=1.0
Math.round(1.6)=2
Math.ceil(1.6)=2.0
Math.floor(-1.4)=-2.0
Math.round(-1.4)=-1
Math.ceil(-1.4)=-1.0
Math.floor(-1.5)=-2.0
Math.round(-1.5)=-1
Math.ceil(-1.5)=-1.0
Math.floor(-1.6)=-2.0
Math.round(-1.6)=-2
Math.ceil(-1.6)=-1.0
Java Math类

数字格式化

在Java中,对没有格式化的数据遵循以下原则:

如果数值绝对值大于0.001并且小于10000000,Java将以常规小数形式表示。
如果数值绝对值小于0.001或者大于10000000,使用科学计数法表示。
为满足实际问题的要求,Java中使用java.text.DecimalFormat来格式化数字。DecimalFormat是NumberFormat的子类,用来格式化十进制数字。一般情况下可以在实例化DecimalFormat对象是传递数字格式,也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。


DecimalFormat类中特殊字符说明:

#:代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉伯数字,如果该位存在数字,则显示字符;如果该位不存在数字,则不显示
.:小数分隔符或货币小数分隔符
-:负号
,:分组分隔符
E:分隔科学计数法中的尾数和指数
%:本符号放置在数字的前缀或后缀,将数字乘以100显示为百分数
\u2030:本符号放置在数字的前缀或后缀,将数字乘以1000显示为千分数
\u00A4:本符号放置在数字的前缀或后缀,作为货币记号

':本符号为单引号,当上述特殊字符出现在数字中时,应为特殊符号添加单引号,系统会将此符号视为普通符号处理

DecimalFormat类中除了可设置格式化模式来格式化数字外,还可以使用一些特殊方法对数组进行格式化设置,例如:DecimalFormat myFormat=new DecimalFormat();   //实例化DecimalFormat类对象
myFormat.setGroupingSize(2);                 //设置将数字分组大小

myFormat.setGroupingUsed(false);            //设置是否支持分组

常用数学运算方法

三角函数方法:

sin(),cos()等,参数和返回值都是double类型。toRadians(),toDegrees(),角度和弧度相互转换,但结果通常是不精确的。

指数函数方法:

Math.exp(x);                    //e的x次幂  
Math.scalb(x, y);               //x*(2的y次幂)
Math.log(e);                    //1 以e为底的对数 
Math.log10(x);                  // 以10为底x的对数  
Math.log1p(x);                  //Ln(x+ 1) 
Math.sqrt(x);                   //√(x) x的二次方根  
Math.cbrt(x);                   // x的立次方根 
Math.pow(x, y);                 //返回 x的y次幂

Math.hypot(x, y);               //√(x²+y²),x和y平方和的二次方根 

取整函数方法:

Math.ceil(12.3);                   //返回大于等于参数的最小整数13.0  
Math.floor(12.3);                  //返回小于等于参数的最大整数12.0  
Math.rint(12.3);                   //返回与参数最接近的整数12.0,如果刚好居中,则取偶数    
public static int round(float x)   //将参数加上0.5后返回与参数最近的整数。  

public static long round(double x) //将参数加上0.5后返回与参数最近的整数,然后强制转换为long型

取最大值、最小值、绝对值等方法:

Math.max(x, y);                 //返回x、y中较大的那个数  
Math.min(x, y);                 //返回x、y中较小的那个数  
Math.abs(-12.3);                //12.3  返回这个数的绝对值
Math.copySign(1.23, -12.3);     //-1.23,返回第一个参数的量值和第二个参数的符号   

Math.signum(x);                 //如果x大于0则返回1.0,小于0则返回-1.0,等于0则返回0  

随机数

Math.random()方法:

在Math类中存在一个random()方法,用于产生随机数字,这个方法默认生成大于等于0.0小于1.0的double型随机数。
利用random()方法也可以随机生成字符,可以使用如下代码生成字符'a'~'z'之间的随机字符。
(char)('a' + Math.random() * ('z' - 'a' + 1));
通过上述表达式可以求出更多的随机字符,如'A'~'Z'之间的随机字符,进而可以推理到求任意两个字符之间的随机字符,可以使用如下语句表示:
(char)(char1 + Math.random() * (char2 - char1 + 1));
random()方法返回得值实际上是伪随机数,它是通过复杂的计算而得到的一系列的数。

该方法是通过当前时间为种子(作为随机数生成方法的参数),来得到每次执行后的不同的随机数。

Random类:

除了Math类中的random()方法,Java还提供了一种可以获取随机数的方式,就是java.util.Random类。可以通过实例化一个Random对象创建一个随机数生成器。+A3:A16A3:A15A3:A14A3:A13A3:A14A3:A15
Random r = new Random();  //其中r是Random对象
以这种方式实例化对象时,Java编译器以系统当前时间作为随机数生成器的种子,因为每时每刻的时间不可能相同,所以产生的随机数将不同。
但是如果运行速度太快,也会产生两次运行结果相同的随机数。同时也可以在实例化Random类对象时,设置随机数生成器的种子。
Random r = new Random(seedValue);  //seedValue是随机数生成器的种子
Random类常用方法:
public int nextInt():返回一个随机整数;
public int nextInt(int n):返回大于等于0小于n的随机整数;
public long nextLong():返回一个随机长整型值;
public boolean nextBoolean():返回一个随机布尔型值;
public float nextFloat():返回一个随机浮点型值;
public double nextDouble():返回一个随机双精度型值;

public double nextGaussian():返回一个概率密度为高斯分布的双精度值;

大数字运算BigInteger类型:

BigInteger类型的数字范围较Integer类型的数字范围要大得多。Integer是int的包装类,BigInteger类是来处理更大的数字。
BigInteger支持任意精度的整数,也就是说在运算中BigInteger类型可以准确地表示任何大小的整数值而不会丢失任何信息。
当使用BigInteger类时,可以实例化一个BigInteger对象,并自动调用相应的构造函数。
BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式要代表要处理的数字。
public BigInteger(String val)     其中,val是十进制字符串。
如果将2转换为BigInteger类型,可以使用一下语句进行初始化操作:
BigInteger twoInstance = new BigInteger("2");    //将十进制2转换为BigInteger形式,参数2的双引号不能省略,因为参数是以字符串的形式存在的。


BigInteger类常用方法:
public BigInteger add(BigInteger val)、subtract(BigInteger val):做加法、减法运算
public BigInteger multiply(BigInteger val)、divide(BigInteger val):做乘法、除法运算
public BigInteger remainder(BigInteger val):做取余运算
public BigInteger[] divideAndRemainder(BigInteger val):用数组返回余数和商,结果数组中第一个值为商,第二个值为余数
public BigInteger pow(int exponent):进行取参数的exponent次方操作
public BigInteger negate():取相反数
public BigInteger shiftLeft(int n)、shiftRight(int n):将数字左移n位,如果n为负数,做右移操作、将数字右移n位,如果n是负数,做左移操作
public BigInteger and(BigInteger val)、or(BigInteger val):做与、做或操作
public int compareTo(BigInteger val):做数字比较操作
public boolean equals(Object x):当参数x是BigInteger类型的数字并且数值相等时,返回true

public BigInteger min(BigInteger val)、max(BigInteger val):返回较小、较大的数值

大数字运算BigInteger类型,BigDecimal类型:

BigDecimal和BigInteger都能实现大数字的运算,不同的是BigInteger加入了小数的概念。一般的float型和double型数据只能用来做科学计算或工程计算。
但由于在商业计算中要求数字精度比较高,所以要用到java.math.BigDecimal类。BigDecimal支持任何精度的定点数,可以用它来精确计算货币值。
在BigDecimal类中常用的两个构造方法如下:
"public BigDecimal(double val):实例化时将双精度型转换为BigDecimal类型
public BigDecimal(String val):实例化时将字符串型转换为BigDecimal类型"
public BigDecimal add(BigDecimal augend)、subtract(BigDecimal subtrahend)、multiply(BigDecimal multiplicand):做加、减、乘法操作
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):做除法操作,方法中参数分别代表:除数、商的小数点后的位数、近似处理模式
BigDecimal类型的数字可以用来做超大的浮点数的运算,其中除法运算是最复杂的,因为在除不尽的情况下末位小数点的处理是需要考虑的。
roundingMode模式有多种设置,用于返回商末位小数点的处理,模式名称与含义如下:
BigDecimal.ROUND_UP:商的最后一位如果大于0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN :商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING:商如果是整数,按照ROUND_UP模式处理;如果是负数,按照ROUND_DOWN模式处理。这种模式的处理都会使近似值大于等于实际值
BigDecimal.ROUND_FLOOR:与ROUND_CEILING模式相反,商如果是整数,按照ROUND_DOWN模式处理;商如果是负数,按照ROUND_UP模式处理,这种模式的处理都会使得近似值小于等于实际值
BigDecimal.ROUND_HALF_DOWN:对商进行四舍五入操作,如果商最后以为小于等于5,则做舍弃操作;如果最后一位大于5,则做进位操作
BigDecimal.ROUND_HALF_UP:对商进行四舍五入操作,如果商最后以为小于5,则做舍弃操作;如果最后一位大于等于5,则做进位操作
BigDecimal.ROUND_HALF_EVEN:如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果为偶数,则按照ROUN_HALF_DOWN处理。如7.5处理后就是8,8.5处理后就是8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值