long和double以及高精度的区别

1.区别

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

2.如果你需要更高的精度,并希望得到准确的结果,可以使用 BigDecimal 类型进行计算:

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
    }
}

3.double和long

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
    }
}