news 2026/8/16 16:03:56

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/8/16 2:26:36

手把手教程:搭建工业级三极管开关电路解析系统

从零搭建工业级三极管开关电路:不只是点亮LED,而是理解控制系统的底层逻辑 你有没有遇到过这种情况——明明代码写对了,MCU也输出高电平了,可继电器就是不吸合?或者电路时好时坏,在实验室运行正常&#xff…

作者头像 李华
网站建设 2026/8/16 6:47:53

52、Windows Phone 7.5及7.1版本功能增强解析

Windows Phone 7.5及7.1版本功能增强解析 1. 磁贴固定与删除功能 在应用开发中,用户可将本地磁贴固定到开始屏幕,这一功能在用户能从多个磁贴选项中进行选择时变得更有趣。以天气应用为例,用户能标记喜欢的地点,并将这些地点对应的磁贴固定到开始屏幕。 以下是删除特定磁…

作者头像 李华
网站建设 2026/8/16 6:46:20

53、7.5 版本增强功能:OData 客户端与搜索扩展性

7.5 版本增强功能:OData 客户端与搜索扩展性 在软件开发过程中,不断优化和扩展应用程序的功能是提升用户体验的关键。本文将详细介绍 7.5 版本中的两个重要增强功能:OData 客户端的优化以及搜索扩展性的提升。 1. OData 客户端 在早期版本中,Windows Phone 7 缺乏对生成…

作者头像 李华
网站建设 2026/8/5 12:55:13

61、Windows Phone 7.1开发工具与功能增强解析

Windows Phone 7.1开发工具与功能增强解析 1. 性能分析与Profiler 在Windows Phone 7.1的开发中,Profiler是一个强大的工具,可用于跟踪应用程序对CPU和内存资源的使用情况。可以执行跨FAS(快速应用切换)的Profiler分析,但不能跨墓碑化(tombstoning)。当应用程序处于休…

作者头像 李华
网站建设 2026/8/15 17:00:56

MOSFET工作原理实测演示:栅极驱动波形与导通损耗关系

MOSFET开关损耗实测揭秘:从栅极波形看效率瓶颈你有没有遇到过这样的情况?选了一颗导通电阻 $ R_{DS(on)} $ 只有几毫欧的“神管”,结果电源模块还是烫得不敢摸,效率卡在90%上不去。问题很可能不在MOSFET本身,而在驱动它…

作者头像 李华
网站建设 2026/8/16 6:51:54

WarcraftHelper终极指南:让经典魔兽在新电脑上完美运行

WarcraftHelper终极指南:让经典魔兽在新电脑上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为老版本魔兽在新系统上频繁崩…

作者头像 李华