今日总结
浮点数表示
Java 中的浮点数(float 和 double)是近似值,并不能精确表示所有小数。例如:
public class PrecisionLoss {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
double sum = a + b; // 期望结果是 0.3
System.out.println("Sum: " + sum); // 可能输出 0.30000000000000004
}
}
类型转换
在将浮点数转换为整数时,小数部分会被截断,可能导致数据损失。例如:
public class TypeConversion {
public static void main(String[] args) {
double value = 5.99;
int intValue = (int) value; // 小数部分被丢弃
System.out.println("Converted Value: " + intValue); // 输出 5
}
}
使用 BigDecimal 解决精度问题
为了处理浮点数的精度问题,可以使用 BigDecimal 类,它提供高精度的计算。示例:
import java.math.BigDecimal;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal sum = a.add(b);
System.out.println("Sum: " + sum); // 输出 0.3
}
}
Random 类提供了多种方法用于生成不同类型和范围的随机数。
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
Random random = new Random();
// 生成一个整数
int randomInt = random.nextInt(); // 生成一个随机整数
System.out.println("随机整数: " + randomInt);
// 生成一个范围在 [0, 100) 的整数
int randomIntWithBound = random.nextInt(100); // 上界为 100
System.out.println("随机整数(0-99): " + randomIntWithBound);
// 生成一个双精度浮点数
double randomDouble = random.nextDouble(); // 生成 [0.0, 1.0) 之间的随机浮点数
System.out.println("随机双精度浮点数: " + randomDouble);
}
}