news 2026/6/10 9:42:03

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/28 7:18:57

42、Windows Phone应用性能优化指南

Windows Phone应用性能优化指南 1. WebClient与HttpWebRequest的选择 在Windows Phone 7中,即使在后台线程创建WebClient,其事件也总是在UI线程上触发。这虽然带来了所有工作都在UI线程上进行的便利(无需调度程序调用),但缺点是有阻塞UI的风险。因此,建议尽量避免使用We…

作者头像 李华
网站建设 2026/6/3 14:09:40

49、手机增强服务:指南针、陀螺仪与运动传感器的应用

手机增强服务:指南针、陀螺仪与运动传感器的应用 1. 指南针应用 1.1 指南针原理 手机中的指南针(磁力计)包含一个磁传感器组件,它与地球磁场相互作用,可指向磁北。设备驱动程序还包含计算磁偏角(磁北与真北之间的差异)的代码。磁偏角在地球不同位置不同,且随时间变化…

作者头像 李华
网站建设 2026/5/30 18:31:52

anything-llm界面设计赏析:美观与实用兼备的AI应用

AnythingLLM界面设计赏析:美观与实用兼备的AI应用 在当今大语言模型百花齐放的时代,一个真正打动用户的AI产品早已不再仅仅比拼“模型有多大”或“回答多快”,而是回归到更本质的问题:普通人能不能用?敢不敢信&#xf…

作者头像 李华
网站建设 2026/6/4 16:49:18

企业级社区老人健康信息管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着我国老龄化进程的加快,社区老年人的健康管理问题日益突出。传统的健康管理模式依赖人工记录和纸质档案,效率低下且易出错,难以满足现代社区管理的需求。老年人健康信息管理系统的开发旨在通过信息化手段提升健康数据的管理效率&…

作者头像 李华
网站建设 2026/5/8 10:30:16

国外代理IP怎么选?5个关键标准避坑指南

在跨境电商、全球数据采集、广告验证、海外网站访问等场景中,国外代理IP已成为企业关键的网络资源之一。然而,市面上国外IP服务鱼龙混杂,如何选出真正稳定、安全、可用率高的海外IP代理服务,成为企业部署业务时的难点。一、选择国…

作者头像 李华
网站建设 2026/6/5 1:31:36

猫抓资源嗅探工具完整使用指南

猫抓资源嗅探工具完整使用指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频下载而烦恼吗?猫抓资源嗅探工具为你带来革命性的解决方案!这款智能浏览器扩展能够…

作者头像 李华