Java中有时遇到对数字的处理,以下总结了一些常见的数字处理方式。
基本数学运算
我们可以用Math类,其中包含用了于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
数字与字符串的转换
这里以int类型和字符串的转换为例。如下:
public class NumberString {
public static void main(String[] args) {
int number = 100;
// 数字转字符串
// 方式1 字符串拼接
String str1 = ""+number;
System.out.println(str1);
// 方式2 String.valueOf() 方法
String str2 = String.valueOf(number);
System.out.println(str2);
// 方式3 基础数据包装类型中的toString()方法
String str3 = new Integer(number).toString();
System.out.println(str3);
// 方式4 基础数据包装类型中的toString(DataType data)方法
String str4 = Integer.toString(number);
System.out.println(str4);
// 字符串转数字
String str = "100";
// 方式1 Integer.parseInt(String str)
int i1 = Integer.parseInt(str);
System.out.println(i1);
// 方式2 Integer . intValue()
int i2 = new Integer(str).intValue();
System.out.println(i2);
}
}
精确计算
由于浮点数在计算时,得到的是近似的结果,结果不一定精确。
如:
System.out.println(32.0-31.1);
结果为0.8999999999999986
为了解决类似的问题,可使用BigDecimal类。如下:
//创建两个数的BigDecimal对象,并调用subtract方法
System.out.println(new BigDecimal("32.0").subtract(
new BigDecimal("31.1")));
长整数计算
对于较长整数的计算,可用BigInteger类来实现。BigInteger对象可表示不可变的任意精度的整数。BigInteger除了提供基本的数学运算方法,还提供了质数测试、素数生成等其他操作。
如这样的一道题:“计算A/B,其中A是不超过1000位的正整数,B是个位数,要求计算商数Q和余数R,使得A = B * Q+ R成立”。
import java.math.BigInteger;
import java.util.Scanner;
public class Division {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 输入的第一个字符串作为被除数A,并转为BigInteger类型
BigInteger numberA = new BigInteger(sc.nextLine());
// 输入的第二个字符串作为除数B,并转为BigInteger类型
BigInteger numberB = new BigInteger(sc.nextLine());
sc.close();
// 将商和余数存入BigInteger类型数组
BigInteger[] dR = numberA.divideAndRemainder(numberB);
// 获取并输出商和余数
System.out.println("商为:"+dR[0].toString()+"余数为:"+dR[1].toString());
}
}
随机数的获取
// 方式1 Math.random()
// 该方法返回一个位于[0.0,1.0)之间的浮点数
// 获取一个60-100的随机数
int randomNumber1 = (int)(Math.random() * 40 + 60);
System.out.println(randomNumber1);
// 方式2 Random类
// nextInt(int n)方法 返回的是一个位于[0,n)之间的int值
// nextDouble() 方法 返回一个位于[0.0,1.0)之间的浮点数
Random r = new Random();
int randomNumber2 =r.nextInt(15);
int randomNumber3 = (int)(r.nextDouble() * 40 + 60);
System.out.println(randomNumber2);
System.out.println(randomNumber3);
多位数中单个数字的获取
我们可以对多位数逐位求余,也可以将多位数转为字符串处理。
如下:
public class Digits {
public static void main(String[] args) {
int number = 1232414345;
//方式1 逐位求余
while(true){
if(number < 10) {
System.out.println(number);
break;
} else {
int digit = number % 10;
System.out.println(digit);
number /= 10;
}
}
//方式2 转为字符串处理
String numberStr = String.valueOf(number);
for(int i=0; i<numberStr.length(); i++){
System.out.println(numberStr.charAt(i));
}
}
}