温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Double 双精度怎样运算

发布时间:2026-10-05 20:21:22 来源:亿速云 阅读:105 作者:小樊 栏目:编程语言

在 Java 里,Double 是 double 的包装类(引用类型),双精度浮点数运算本质上还是按 IEEE 754 64 位浮点数规则 来进行的。下面从「基本运算」「常见坑」「推荐做法」三方面说清楚。


一、Double 的基本运算

1️⃣ 基本四则运算(直接用值)

double a = 1.1;
double b = 2.2;

double sum = a + b;      // 加
double diff = a - b;     // 减
double mul = a * b;      // 乘
double div = a / b;      // 除

2️⃣ 使用 Double 包装类

Double x = 1.1;
Double y = 2.2;

Double result = x + y; // 自动拆箱成 double,再装箱

⚠️ Double 是对象,运算时会自动拆箱成 double


二、Double 运算的“经典坑”

❌ 1. 浮点数精度问题

System.out.println(0.1 + 0.2);
// 输出:0.30000000000000004

原因:
double 是二进制浮点数,不能精确表示很多十进制小数。


❌ 2. 直接比较相等不可靠

Double a = 0.1 + 0.2;
Double b = 0.3;

System.out.println(a == b); // false

✅ 正确比较方式:

方式一:误差范围(推荐)

double eps = 1e-9;
if (Math.abs(a - b) < eps) {
    // 认为相等
}

方式二:使用 Double.compare

if (Double.compare(a, b) == 0) {
    // 不推荐用于浮点误差场景
}

三、常用数学运算(Math 类)

Math.sqrt(x);     // 平方根
Math.pow(x, y);   // x 的 y 次方
Math.abs(x);      // 绝对值
Math.max(a, b);
Math.min(a, b);
Math.round(x);    // 四舍五入
Math.floor(x);    // 向下取整
Math.ceil(x);     // 向上取整

四、需要“精确计算”怎么办?

✅ 用 BigDecimal(金额、科学计算必用)

import java.math.BigDecimal;

BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");

BigDecimal sum = a.add(b); // 0.3

❗ 不要用:

new BigDecimal(0.1) // 错误,仍然是浮点误差

五、Double 特殊值(容易踩雷)

Double.NaN;      // 非数字
Double.POSITIVE_INFINITY;
Double.NEGATIVE_INFINITY;

判断方式:

Double.isNaN(x);
Double.isInfinite(x);

六、总结建议

场景 建议
普通科学计算 double
金额 / 精确计算 BigDecimal
浮点比较 用误差范围
高性能运算 避免 Double 对象,用 double

如果你有具体场景(比如:金额运算 / 算法 / 性能优化 / 和数据库交互),我可以给你更针对性的写法。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手