news 2026/5/23 17:39:24

BigDecimal用法示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BigDecimal用法示例

BigDecimal用法示例

文章目录

  • BigDecimal用法示例
    • 1. 加法:`add`
    • 2. 减法:`subtract`
    • 3. 乘法:`multiply`
    • 4. 除法:`divide`
      • 说明:
    • 5. 小数位数控制:`setScale`
    • 6. 注意事项
    • 总结示例

BigDecimal是 Java 中用于高精度数值计算的类,尤其适合金融和货币计算,避免了浮点数的精度误差。下面是BigDecimal进行加减乘除的基本用法和注意事项。

1. 加法:add

javaBigDecimal a=newBigDecimal("10.5");BigDecimalb=newBigDecimal("2.3");BigDecimalresult=a.add(b);// 10.5 + 2.3 = 12.8

2. 减法:subtract

javaBigDecimal a=newBigDecimal("10.5");BigDecimalb=newBigDecimal("2.3");BigDecimalresult=a.subtract(b);// 10.5 - 2.3 = 8.2

3. 乘法:multiply

javaBigDecimal a=newBigDecimal("10.5");BigDecimalb=newBigDecimal("2.3");BigDecimalresult=a.multiply(b);// 10.5 * 2.3 = 24.15

4. 除法:divide

除法是BigDecimal的难点,因为除法有可能会产生无限循环小数,需要指定舍入模式和精度。

javaBigDecimal a=newBigDecimal("10.5");BigDecimalb=newBigDecimal("3");BigDecimalresult=a.divide(b,2,RoundingMode.HALF_UP);// 保留2位小数,四舍五入// 10.5 / 3 = 3.50

说明:

  • 第二个参数2是保留的小数位数(scale)
  • 第三个参数是舍入模式,比如常用的:
    • RoundingMode.HALF_UP— 四舍五入
    • RoundingMode.DOWN— 直接截断
    • RoundingMode.HALF_EVEN— 银行家舍入法

5. 小数位数控制:setScale

可以对结果进行小数位数的控制和舍入:

javaBigDecimal value=newBigDecimal("12.34567");// 保留两位小数,四舍五入BigDecimalscaledValue=value.setScale(2,RoundingMode.HALF_UP);// 12.35

6. 注意事项

  • BigDecimal的构造建议传入字符串或long/doublevalueOf,避免直接用new BigDecimal(double)因为可能带来精度误差:

    javanewBigDecimal("0.1");// 推荐BigDecimal.valueOf(0.1);// 推荐newBigDecimal(0.1);// 不推荐,可能得到0.10000000000000000555
  • BigDecimal对象是不可变的,所有操作都会返回一个新的BigDecimal,原对象不变。


总结示例

javaimportjava.math.BigDecimal;importjava.math.RoundingMode;publicclassBigDecimalDemo{publicstaticvoidmain(String[]args){BigDecimala=newBigDecimal("10.5");BigDecimalb=newBigDecimal("3");BigDecimalsum=a.add(b);BigDecimaldiff=a.subtract(b);BigDecimalmul=a.multiply(b);BigDecimaldiv=a.divide(b,2,RoundingMode.HALF_UP);System.out.println("加法: "+sum);// 13.0System.out.println("减法: "+diff);// 7.5System.out.println("乘法: "+mul);// 31.5System.out.println("除法: "+div);// 3.50doubleamount=mallProcureOrderDetailBOList.stream().map(record->BigDecimal.valueOf(record.getCommodityPrice()).multiply(BigDecimal.valueOf(record.getQuantity()))).reduce(BigDecimal.ZERO,BigDecimal::add).setScale(2,RoundingMode.HALF_UP).doubleValue();System.out.println("java8 stream 加法: "+amount);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 16:57:12

工厂人员定位工卡从部署实施、典型应用、成本与ROI分析等详解(二)

hello~这里是维构lbs智能定位,如果有项目需求和技术交流欢迎来私信我们~点击文章最下方可获取免费获取技术文档和解决方案。 上篇工厂人员定位卡从技术原理、功能与技术实现、选型指南详解(一)里详解了该产品采用UWB/蓝牙/RFID/GNSS融合技术&…

作者头像 李华
网站建设 2026/5/9 15:05:03

Zotero-Better-Notes关系图谱:解锁知识管理的可视化新维度

Zotero-Better-Notes关系图谱:解锁知识管理的可视化新维度 【免费下载链接】zotero-better-notes Everything about note management. All in Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-better-notes 在信息爆炸的时代,如何在…

作者头像 李华
网站建设 2026/5/16 17:36:32

7步掌握ComfyUI-VideoHelperSuite Video Combine节点核心操作

7步掌握ComfyUI-VideoHelperSuite Video Combine节点核心操作 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite Video Combine节点是ComfyUI-VideoHelperSuite中实现…

作者头像 李华
网站建设 2026/5/16 5:17:58

N_m3u8DL-RE流媒体下载终极指南:从零到精通完整教程

N_m3u8DL-RE流媒体下载终极指南:从零到精通完整教程 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器,支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE …

作者头像 李华
网站建设 2026/5/16 18:18:28

终极解决方案:5分钟彻底告别机械键盘连击烦恼

终极解决方案:5分钟彻底告别机械键盘连击烦恼 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 还在为机械键盘的连击问题而烦…

作者头像 李华
网站建设 2026/5/20 12:24:43

55、数据库数据操作与管理全解析

数据库数据操作与管理全解析 在数据库应用开发中,对数据库数据的操作与管理是至关重要的环节,涵盖了数据的增删改查、数据库架构更新、表间关联处理以及数据存储管理等多个方面。下面将详细介绍这些内容。 数据库数据的基本操作 在建立好基本的数据库连接后,支持对数据库…

作者头像 李华