long和double以及高精度的区别

文章讨论了Java中double类型浮点数在存储和计算时的精度问题,指出double无法精确表示0.1+0.2的结果,并推荐使用BigDecimal解决高精度计算需求。同时,对比了double和long的数据范围及输出示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值