深入了解Java中的BigDecimal类及其方法

在Java中,BigDecimal类是一个用于精确计算浮点数的不可变类,特别适用于财务计算,能够避免传统浮点类型可能导致的精度问题。本文将详细介绍BigDecimal类及其常用方法,并通过示例说明如何使用这些方法。

基本介绍

BigDecimal类允许用户进行高精度的定点数运算,包括加、减、乘、除等操作,同时支持各种舍入模式,确保了运算结果的准确性。

构造方法

// 从字符串构造
BigDecimal bd1 = new BigDecimal("3.14");// 从整数构造
BigDecimal bd2 = BigDecimal.valueOf(5);// 从 BigInteger 构造
BigInteger bi = new BigInteger("123456789");
BigDecimal bd3 = new BigDecimal(bi);

常用方法示例

加法 add
BigDecimal a = new BigDecimal("10.5");
BigDecimal b = new BigDecimal("2.5");
BigDecimal sum = a.add(b); // 结果为 13.0
减法 subtract
BigDecimal a = new BigDecimal("10.5");
BigDecimal b = new BigDecimal("2.5");
BigDecimal diff = a.subtract(b); // 结果为 8.0
乘法 multiply
BigDecimal a = new BigDecimal("10.5");
BigDecimal b = new BigDecimal("2");
BigDecimal product = a.multiply(b); // 结果为 21.0
除法 divide
BigDecimal a = new BigDecimal("10.5");
BigDecimal b = new BigDecimal("2");
BigDecimal quotient = a.divide(b, 2, RoundingMode.HALF_UP); // 结果为 5.25,第二参数指定了小数位数,第三个参数指定了舍入模式
舍入与调整精度 setScale
BigDecimal num = new BigDecimal("123.456");
BigDecimal rounded = num.setScale(2, RoundingMode.DOWN); // 结果为 123.45
比较 compareTo
BigDecimal a = new BigDecimal("10.5");
BigDecimal b = new BigDecimal("10.6");
int comparisonResult = a.compareTo(b); // 返回负数,表示a小于b
转换为其他类型
  • toBigInteger():转换为BigInteger
  • doubleValue():转换为double
  • intValue():转换为int,可能会丢失精度
其他重要方法
  • abs():返回绝对值
  • negate():返回相反数
  • pow(int exponent):返回此BigDecimal的指定次幂
  • stripTrailingZeros():去掉末尾的零
  • toString():转换为字符串表示形式

舍入模式

BigDecimal提供了多种舍入模式,如:

  • ROUND_UP:向远离零的方向舍入
  • ROUND_DOWN:向零方向舍入
  • ROUND_HALF_UP:最常用的模式,四舍五入
  • ROUND_HALF_DOWN:五舍六入
  • 更多模式请参考Javadoc

注意事项

  • 在进行算术运算时,务必确保所有参与运算的BigDecimal对象具有相同的精度和舍入模式,以避免意外的精度损失或结果不一致。
  • 构造BigDecimal时,推荐使用字符串参数来保证精度,避免使用double直接构造,因为doubleBigDecimal的转换可能会引入误差。

通过上述介绍和示例,您应该能对BigDecimal类有一个较为全面的认识,并能在实际开发中灵活运用它来进行精确的数值计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AJAX、

文章目录 AJAX1. AJAX简介AJAX特点 2. XML简介3. AJAX发送get请求4. post请求设置体参数5. 设置请求头信息6. AJAX请求服务端响应json数据7. ie缓存问题8. 请求超时问题和网络异常9. 取消请求10. 请求重复取消11. jQuery中的AJAX请求12. axios函数发送AJAX使用fetch函数发送AJA…

跨境电商赛道,云手机到底能不能化繁为简?

当下国内电商背景: 从零售额的数据来看:随着互联网的普及和消费者购物习惯的改变,国内电商市场规模持续扩大。据相关数据显示,网络消费亮点纷呈,一季度全国网上零售额达到了3.3万亿元,同比增长12.4%。这表…

html 段落与排版标记 Web前端开发技术、详细文章(例如)

段落与排版标记 网页的外观是否美观,很大程度上取决于其排版。在页面中出现大段的文字,通常采用分段进行规划,对换行也有极其严格的划分。本节从段落的细节设置入手,利用段落与排版标记自如地处理大段的文字。 段落p标记 在HTM…

探索SRM系统的未来:第一批吃螃蟹的企业如何用API/插件打破效率瓶颈?

官.网地址:合合TextIn - 合合信息旗下OCR云服务产品 一、SRM开放集成实践前瞻 二、开放集成渐成系统升级新趋势 降本增效是企业经营的一大永恒话题。通常而言,企业在不同发展阶段中,会使用到不同的管理系统,或产生不同的业务场…

LLM提示词编写技巧-prompt必知必会

LLM大模型提示词编写技巧 提示词的构成要素基础技巧添加明确的语法分解任务指定输出结构 进阶技巧少样本学习 Few Shot零样本学习zero shot思维链提示 CoTCO-STAR框架 高阶技巧自动推理并生成工具 ART推理行动 ReACT 好用的提示词示例绘制工作流程图编写技术博客 参考资料 提示…

热红外传感器

热红外传感器 一、热红外测温原理二、热红外传感器三、MLX90640-D55(MLX90640-BAB)测试 一、热红外测温原理 自然界中当物体的温度高于 绝对零度 时,由于它内部 热运动 的存在,就会不断地向四周辐射电磁波,其中就包含了波段位于0.75~100μm …

K8S认证|CKA题库+答案| 14. 排查故障节点

14、排查集群中的故障节点 您必须在以下Cluster/Node上完成此考题: Cluster Master node Worker node wk8s master …

LLMjacking:针对云托管AI大模型服务的新型攻击

Sysdig威胁研究团队(TRT)观察到一种新型攻击,命名为LLMjacking。它利用窃取的云凭证,对托管在云上的十个大型语言模型(LLM)服务发起攻击。 这些凭证是从一个流行的目标获得,即运行着一个存在漏洞的Laravel版本(CVE-2021-3129&…

常见算法(1)

1.基本查找/顺序查找 核心:从0索引之后挨个查找 实现代码: public class test {public static void main(String [] arg) throws ParseException {int[] arr {121,85,46,15,55,77,63,49};int number55;System.out.println(bashi(arr,number));}publi…

【编译原理复习笔记】正则表达式与自动机

正则表达式 正则表达式是一种用来描述正则语言的更紧凑的表达方法 e.g. r a ( a ∣ b ) ∗ ( ϵ ∣ ( . ∣ ) ( a ∣ b ) ) ra(a|b)^*(\epsilon|(.|\\_ )(a|b)) ra(a∣b)∗(ϵ∣(.∣)​(a∣b)) 正则表达式可以由较小的正则表达式按照特定的规则递归地构建。每个正则表达式定义…

综述 | 走向图对比学习:综述与展望

【摘要】近年来,图的深度学习在各个领域取得了显著的成功。然而,对带注释的图形数据的依赖仍然是一个很大的瓶颈,因为它的成本过高且耗费时间。为了应对这一挑战,图的自监督学习(SSL)得到了越来越多的关注,并取得了重大…

群晖搭建网页版Linux Ubuntu系统并实现远程访问

文章目录 1. 下载Docker-Webtop镜像2. 运行Docker-Webtop镜像3. 本地访问网页版Linux系统4. 群晖NAS安装Cpolar工具5. 配置异地访问Linux系统6. 异地远程访问Linux系统7. 固定异地访问的公网地址 docker-webtop是一个基于Docker的Web桌面应用,它允许用户通过浏览器远…

二十五、openlayers官网示例CustomOverviewMap解析——实现鹰眼地图、预览窗口、小窗窗口地图、旋转控件

官网demo地址: Custom Overview Map 这个示例展示了如何在地图上增加一个小窗窗口的地图并跟随着地图的旋转而旋转视角。 首先加载了一个地图。其中 DragRotateAndZoom是一个交互事件,它可以实现按住shift键鼠标拖拽旋转地图。 const map new Map({int…

客户端Web资源缓存

为了提高Web服务器的性能,其中的一种可以提高Web服务器性能的方法就是采用缓存技术。 1.缓存 1.1.什么是缓存? 如果某个资源的计算耗时或耗资源,则执行一次并存储结果。当有人随后请求该资源时,返回存储的结果,而不是再次计算。…

【Linux】-Flink分布式内存计算集群部署[21]

注意: 本节的操作,需要前置准备好Hadoop生态集群,请先部署好Hadoop环境 简介 Flink同spark一样,是一款分布式内存计算引擎,可以支撑海量数据的分布式计算 Flink在大数据体系同样是明星产品,作为新一代的…

ElasticSearch集群重平衡(Shard allocation)案例分析及性能调优

何谓重平衡 ElasticSearch为了使数据平均分布在集群节点上,重平衡机制会由Master节点决定索引分片具体分配到哪个Data节点以及何时在节点之间迁移分片,使分片在数据大小、分片数量的层面上尽可能均匀分布在集群中的所有Data节点,充分发挥每个…

css - sass or scss ?

总的来说,Sass 和 SCSS 提供的功能是一样的,选择哪种语法主要取决于你的个人或团队的偏好。

4.2 循环语句(for, while)

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【Linux取经路】基于信号量和环形队列的生产消费者模型

文章目录 一、POSIX 信号量二、POSIX 信号量的接口2.1 sem_init——初始化信号量2.2 sem_destroy——销毁信号量2.3 sem_wait——等待信号量2.4 sem_post——发布信号量 三、基于环形队列的生产消费者模型3.1 单生产单消费模型3.2 多生产多消费模型3.3 基于任务的多生产多消费模…

期货学习笔记-横盘行情学习1

横盘行情的特征及分类 横盘行情的概念 横盘行情时中继形态的一种,一般常出现在大涨或大跌之后出现横盘行情是对当前趋势行情的修正,是对市场零散筹码的清理,是为了集中筹码更便于后期行情的展开 横盘行情的特征 1.水平运动:该…