📜  浮动 - Java (1)

📅  最后修改于: 2023-12-03 15:40:45.391000             🧑  作者: Mango

浮动 - Java

在Java中,浮点型数据是一种用来表示小数的数据类型。

它们比整型数据类型具有更高的精度,因为它们能够存储小数部分。浮点型数据类型分为两种:floatdouble

float

float是Java中表示单精度浮点型的数据类型。通常情况下,声明float变量时需要在数值后面加上一个字母Ff来表示它是一个float类型的变量。

float f = 3.14f;
double

double是Java中表示双精度浮点型的数据类型。它的精度比float更高,而且可以表示更大更小的数。同样的,在声明double变量时需要在数值后面加上一个字母Dd来表示它是一个double类型的变量。

double d = 3.1415926;
使用浮点类型可能引发的问题
浮点型数据舍入误差

在计算机内部,浮点数必须用有限的二进制数字表示。这意味着某些十进制小数无法准确表示为二进制数。

例如,下面的代码运行结果并不是我们期望的结果:

float f = 0.1f;
System.out.println(f); // 输出 0.1
System.out.println(f == 0.1f); // 输出 false

这是由于0.1在二进制系统中无法精确表示。所以在执行相等比较时,结果是false

浮点型数据运算误差

在进行浮点数的运算时,可能会存在舍入误差和运算误差。

例如:

double a = 1.0;
double b = 0.1;
double sum = 0.0;

for (int i = 0; i < 10; i++) {
    sum += b;
}

if (sum == a) {
    System.out.println("sum is equal to a");
} else {
    System.out.println("sum is not equal to a");
}

这段代码的期望输出是sum is equal to a,但实际上输出的是sum is not equal to a。这是由于浮点型数据在进行运算时容易存在误差,可能会导致结果与期望的结果不同。

总结

在进行高精度计算或要求精确的场景下,建议使用BigDecimal类来处理小数,或者使用整数类型来表示小数(例如表示货币时通常要求保留小数点后两位,可以将货币的值乘以100并使用整数类型来存储)。在其他场景下,使用浮点型数据类型可以提供更高的精度和更广的取值范围。