文章目录
1.数字处理类
DecimalFormat是NumberFormat的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、科学计数法、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般情况下可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。
例:
package Number;
import java.text.DecimalFormat;
public class DecimalFormatSimpleDemo {
static void format(String pattern, double value) {
DecimalFormat df = new DecimalFormat(pattern);
System.out.println(value);
System.out.println(pattern);
System.out.println(df.format(value));
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
format("####",123);
format("###,###.###$",123456.789);
format("0.00\u2030",0.097);
}
}
结果如下:
123.0
####
123
123456.789
###,###.###$
123,456.789$
0.097
0.00‰
97.00‰
2. 数字运算
2.1 Math类
在Math类中提供了众多数学函数方法,主要包括三角函数方法、指数函数方法、取整函数方法、取最大值、最小值以及平均值函数方法,这些方法都被定义为static形式,所以在程序中应用比较简便。可以使用如下形式调用:
math.数学方法
在Math类中除了函数方法之外还存在一些常用数学常量,如圆周率、E等。这些数学常量作为Math类的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math.PI
Math.E
使用math方法不需要导包。
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("圆周率pi的值为:"+Math.PI);
}
}
圆周率pi的值为:3.141592653589793
2.2 常用的数学运算方法
在Math类中的常用数学运算方法较多,大致可以将其分为4大类别,分别为三角函数方法、指数函数方法、取整函数方法以及取最大值、最小值和绝对值函数方法。
1.三角函数方法
2.指数函数方法
3.取整函数方法
4.取最大值、最小值、绝对值函数方法
package Number;
public class Demo {
public static void main(String[] args) {
//三角函数
System.out.println("90度的正弦值:"+Math.sin(Math.PI/2));
System.out.println("90度的正弦值:"+Math.cos(0));
//指数运算
System.out.println("e的平方值:"+Math.exp(2));
System.out.println("以e为底的2的对数值:"+Math.log(2));
System.out.println("以e为底的2的对数值:"+Math.log10(2));
System.out.println("4的平方根:"+Math.sqrt(4));
System.out.println("8的立方根:"+Math.cbrt(8));
System.out.println("2的2次方:"+Math.pow(2, 2));
System.out.println("2的5次方:"+Math.pow(2, 5));
//比较运算
System.out.println("4和8较大的是:"+Math.max(4, 8));
System.out.println("4和8较小的是:"+Math.min(4, 8));
System.out.println("-7的绝对值:"+Math.abs(-7));
//四舍五入
System.out.println("使用floor()方法的效果:"+Math.floor(2.5));
System.out.println("使用round()方法的效果:"+Math.round(2.5));
}
}
结果:
4的平方根:2.0
8的立方根:2.0
2的2次方:4.0
2的5次方:32.0
4和8较大的是:8
4和8较小的是:4
-7的绝对值:7
使用floor()方法的效果:2.0
使用round()方法的效果:3
3. 随机数
3.1 Math.random()方法
在Math类中存在一个random()方法,用于产生随机数字,这个方法默认生成大于等于0.0小于1.0的double型随机数,即0<=Math.random()<1.0,虽然Math.random()方法只可以产生0~1之间的double型数字,其实只要在Math.random()语句上稍加处理,就可以使用这个方法产生任意范围的随机数。
使用Math类的random()方法也可以随机生成字符,可以使用如下代码生成a到z之间的字符。
(char)('a'+Math.random()*('z'-'a'+1));
通过上述表达式可以求出更多的随机字符,如A~Z之间的随机字符。若想生成任意两个字符之间的随机字符,可以通过以下语句实现:
(char)(char1+Math.random()*(char2-char1+1));
例子:
package Number;
public class Demo {
public static char GetRandomChar(char char1,char char2) {
return (char)(char1+Math.random()*(char2-char1+1));
}
public static void main(String[] args) {
//获取a~z之间的随机字符
System.out.println("任意小写字符:"+GetRandomChar('a','z'));
//获取A~Z之间的随机字符
System.out.println("任意大写字符:"+GetRandomChar('A','Z'));
//获取0~9之间的随机字符
System.out.println("0~9任意数字:"+GetRandomChar('0','9'));
}
}
结果:
任意小写字符:q
任意大写字符:F
0~9任意数字:5
例2:
package Number;
public class Demo {
public static void main(String[] args) {
for(int i=0;i<10;i++) {
System.out.println(Math.random());
}
}
}
结果:
0.953028952172099
0.8073209285277249
0.693818706000683
0.5928218051688678
0.4828666772943693
0.28497742942583826
0.9522642873937066
0.3076296214635281
0.9172152539442813
0.5716496819086655
小游戏:
package Number;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
System.out.println("---猜数字---");
int num = (int)(Math.random()*100);
int guess;
Scanner sc = new Scanner(System.in);
System.out.println("请输入猜测的数字:");
guess = sc.nextInt();
while(guess!=num) {
if(guess<num) {
System.out.println("太小了,重新输入!");
guess = sc.nextInt();
}else {
System.out.println("太大了,重新输入!");
guess = sc.nextInt();
}
}
System.out.println("猜对了,数字是:"+num);
sc.close()
}
}
结果:
---猜数字---
请输入猜测的数字:
44
太小了,重新输入!
66
太大了,重新输入!
55
太大了,重新输入!
50
太大了,重新输入!
46
猜对了,数字是:46
3.2 Random类
除了Math类中的random()方法可以获取随机数之外,在Java中还提供了一种可以获取随机数的方式,那就是java.util.Random类。可以通过实例化一个Random对象创建一个随机数生成器。
语法如下:
Random r=new Random();
其中,r是指Random对象。
以这种方法实例化对象时,Java编译器将以系统当前时间作为随机数生成器的种子。用户也可以在实例化Random类对象时,设置随机数生成器的种子。语法如下:
Random.r = new Random(seedValue);
其中,r是Random类对象,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()
:返回一个概率密度为高斯分布的双精度值
4. 大数字运算
4.1 BigInteger
在BigInteger类中封装了多种操作,除了基本的加、减、乘、除操作之外,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。
当使用BigInteger类时,可以实例化一个BigInteger对象,并自动调用相应的构造函数。BigInteger类具有很多构造函数,但最直接的一种方式是参数以字符串形式代表要处理的数字。
语法如下:
public BigInteger(String val);
其中,val是十进制字符串。
如果将2转换为BigInteger类型,可以使用以下语句进行初始化操作:
BigInteger twoInstance = new BigInteger("2")
一些常用的运算方法:
package Number;
import java.math.BigInteger;
public class Demo {
public static void main(String[] args) {
BigInteger i1 = new BigInteger("99");
BigInteger i2 = BigInteger.valueOf(999999L);
System.out.println("加法\t" + i1.add(new BigInteger("1")));
System.out.println("减法\t" + i1.subtract(new BigInteger("2")));
System.out.println("乘法\t" + i1.multiply(new BigInteger("999")));
System.out.println("除法\t" + i1.divide(new BigInteger("3")));
System.out.println("求余\t" + i1.remainder(new BigInteger("5")));
System.out.println("求幂\t" + i1.pow(10));
System.out.println("比较大小\t" + i1.compareTo(i2));
System.out.println("比较相等\t" + i1.equals(i2));
System.out.println("取最大值\t" + i1.max(i2));
System.out.println("取最小值\t" + i1.min(i2));
// 取最大公约数
BigInteger a = new BigInteger("12345");
BigInteger b = new BigInteger("123");
System.out.println(a + "与" + b + "的最大公约数是:" + a.gcd(b));
}
}
结果:
加法 100
减法 97
乘法 98901
除法 33
求余 4
求幂 90438207500880449001
比较大小 -1
比较相等 false
取最大值 999999
取最小值 99
12345与123的最大公约数是:3
4.2 BigDecimal
BigDecimal和BigInteger都能实现大数字的运算,不同的是BigDecimal加入了小数的概念。一般的float型和double型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到java.math.BigDecimal类。
BigDecimal类支持任何精度的定点数,可以用它来精确计算货币值。
构造方法如下:
BigDecimal d = new BigDecimal("3.14");
BigDecimal d = new BigDecimal(3.14);
BigDecimal d = BigDecimal.valueOf(3.14);