double是双精度浮点数类型,double类型的数字都是以二进制的形式进行存储的
,因此不能精确的表示一些十进制数
,比如:0.1,0.2等;
而long的取值范围虽然比double要小,但是可以表示所有整数
解释:
比如:0.1,0.2这类十进制数,在二进制中不能被精确表示
(无限循环小数),比如0.1
就被表示为 0.0001100110011......
,这就导致了double无法精确存储某些十进制数
**例如:**在 double 类型中,0.1 + 0.2
的结果应该是 0.30000000000000004
,而不是精确的 0.3。这就是舍入误差导致的结果。这种误差对于某些应用程序来说可能没有影响,但对于需要高精度计算的程序来说,就会产生严重的问题。
double a = 0.1;
double b = 0.2;
double sum = a + b;
System.out.println(sum); // 输出:0.30000000000000004
import java.math.BigDecimal;
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal sum = a.add(b);
System.out.println(sum); // 输出:0.3
public class Example {
public static void main(String[] args) {
long x = 1234567890123456789L;
System.out.println(x); // 输出:1234567890123456789
long y = 9223372036854775807L;
System.out.println(y); // 输出:9223372036854775807
}
}
public class Example {
public static void main(String[] args) {
double x = 1234567890123456789.0;
System.out.println(x); // 输出:1.2345678901234568E18
long y = 1234567890123456789L;
System.out.println(y); // 输出:1234567890123456789
}
}