在Java里BigDecimal如何进行高精度计算_Java精度运算类说明-java教程

BigDecimal构造应避免double参数,须用String或valueOf;四则运算必须调用add、subtract等方法;比较大小唯一可靠方式是compareTo;setScale和divide需按业务选RoundingMode,货币标度通常为2。

BigDecimal构造时别用double参数

直接用new BigDecimal(0.1)会导致精度污染,因为0.1这个double字面量在二进制中本就是近似值,传入后会把误差原样保留。比如new BigDecimal(0.1).toString()实际输出"0.1000000000000000055511151231257827021181583404541015625"。

正确做法是用字符串构造:new BigDecimal("0.1")。所有需要精确表达的数值,只要来源是字面量、用户输入或数据库字段(非binary类型),都应走String构造器。

  • 从double转来必须先用Double.toString(d)再构造,但更推荐源头就避免double
  • BigDecimal.valueOf(double)是安全的——它内部调用了Double.toString,可作为double转BigDecimal的唯一推荐方式
  • 从数据库读取DECIMAL或NUMERIC字段时,JDBC驱动通常返回String或BigDecimal,优先取后者

四则运算必须用方法而非操作符

Java不支持BigDecimal的+、-、*、/重载,写a + b会触发自动拆箱为double再相加,彻底丢失精度和语义。

所有计算必须显式调用方法:

立即学习“Java免费学习笔记(深入)”;

  • 加法:a.add(b)
  • 减法:a.subtract(b)
  • 乘法:a.multiply(b)
  • 除法:a.divide(b, scale, RoundingMode.HALF_UP)——除法必须指定精度和舍入模式,否则遇到无限小数(如1/3)直接抛ArithmeticException

注意multiply结果的精度是两操作数精度之和,而add/subtract结果精度是两者中较大者,这些细节会影响后续比较或存储。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 在Java里BigDecimal如何进行高精度计算_Java精度运算类说明-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001941+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4001942+
  • 本周更新: 0+
  • 最后更新: 2026-03-16