BigDecimal应使用字符串构造避免精度误差,运算返回新实例,除法需指定精度和舍入模式(如HALF_UP),比较应使用compareTo而非equals。

在Java中,BigDecimal 是处理高精度数学运算的常用类,特别适用于金融计算、科学计算等对精度要求高的场景。它能避免 float 和 double 运算中的精度丢失问题。
1. 创建 BigDecimal 对象
建议使用字符串构造函数创建,避免使用 double 构造函数导致精度问题。
- BigDecimal a = new BigDecimal("0.1"); // 正确
- BigDecimal b = new BigDecimal(0.1); // 不推荐,可能引入精度误差
2. 基本数学运算方法
BigDecimal 是不可变对象,所有运算都会返回新的实例。
- 加法(add):a.add(b)
- 减法(subtract):a.subtract(b)
- 乘法(multiply):a.multiply(b)
- 除法(divide):需注意除不尽的情况,必须指定精度和舍入模式
3. 舍入模式(RoundingMode)
在进行除法或设置精度时,必须指定舍入方式:
XYCMS建站系统PHP版非MVC框架,自己手写原生态普通代码,作为企业用,已经绰绰有余。软件运行效率中等,加入数据缓存后性能提高。假如用来学习,下载可以慢慢研究的,假如用来建站,可以选择购买商业版就行建站用。栏目类别:文章,人员信息,专题项目,招聘,下载,相册,单页【支持无限极分类】文章:可用作添加新闻,资讯,列表信息类栏目信息人员信息:可用作企业员工信息栏目内容添加或者维护专题项目:可用作企业
立即学习“Java免费学习笔记(深入)”;
- RoundingMode.HALF_UP:四舍五入(最常用)
- RoundingMode.DOWN:向零方向舍入
- RoundingMode.UP:远离零方向进位
- RoundingMode.FLOOR:向下取整
- RoundingMode.CEILING:向上取整
4. 比较与等值判断
使用 compareTo() 判断数值大小,equals() 还会比较精度(scale),不推荐用于值比较。
BigDecimal x = new BigDecimal("1.0"); BigDecimal y = new BigDecimal("1.00"); x.equals(y); // false,因为 scale 不同 x.compareTo(y) == 0; // true,数值相等 基本上就这些,用好构造方式、掌握 divide 的参数要求、注意比较方式,就能正确使用 BigDecimal 完成精确计算。










