java.math 包 中的 BigDecimal 类(详细案例拆解)

前言:

小编打算近期更俩三期类的专栏,一些常用的专集类,给大家分好类别总结和详细的代码举例解释。

今天是第五个  java.lang.Math 包中的  BigDecimal 类

我们一直都是以这样的形式,让新手小白轻松理解复杂晦涩的概念,

把Java代码拆解的清清楚楚,每一步都知道他是怎么来的,

为什么用这串代码关键字,对比同类型的代码,

让大家真正看完以后融会贯通,举一反三,实践应用!!!!


①官方定义  和  大白话拆解对比

②举生活中常见贴合例子、图解辅助理解的形式

③对代码实例中关键部分进行详细拆解、总结



给小编一个赞或者关注吧,我们一起进步!!

官方语言:

  • BigDecimal 类是 Java 中用于处理高精度数值计算的类。它支持不可变的、任意精度的有符号十进制定点数。在商业计算中,由于对数字精度要求较高,通常使用 BigDecimal 类来代替 Float 和 Double 类。

构造器

  • public BigDecimal(double val):通过一个 double 类型的值创建 BigDecimal 对象。
  • public BigDecimal(String val):通过一个字符串形式的数值创建 BigDecimal 对象,推荐使用这种方式以避免精度损失。

常用方法

  • add(BigDecimal augend):将当前 BigDecimal 对象与另一个 BigDecimal 对象相加。
  • subtract(BigDecimal subtrahend):从当前 BigDecimal 对象减去另一个 BigDecimal 对象。
  • multiply(BigDecimal multiplicand):将当前 BigDecimal 对象与另一个 BigDecimal 对象相乘。
  • divide(BigDecimal divisor, int scale, int roundingMode):将当前 BigDecimal 对象除以另一个 BigDecimal 对象,并指定保留的小数位数和舍入模式。


大白话拆解:

  • BigDecimal 是 Java 中的一个类,专门用来处理那些需要非常高精度的数字计算。比如,在银行系统中处理金额时,我们不能允许有任何误差,这时就需要用到 BigDecimal。

构造器

  • 你可以通过一个数字或者一个字符串来创建一个 BigDecimal 对象。如果你用字符串来创建,这样可以避免一些小数点后的误差问题。

常用方法

  • add():把两个 BigDecimal 数字相加。
  • subtract():从一个 BigDecimal 数字中减去另一个 BigDecimal 数字。
  • multiply():把两个 BigDecimal 数字相乘。
  • divide():把一个 BigDecimal 数字除以另一个 BigDecimal 数字,并且你可以指定保留几位小数以及如何处理多余的位数(比如四舍五入)。

举个栗子:

代码案例描述:

正在开发一个电商系统,需要计算某个商品的最终价格(包括税费)以及给定折扣后的实际支付金额。我们将通过以下步骤来完成:

  1. 定义商品的基础价格。
  2. 计算包含税费的商品总价。
  3. 应用折扣后计算实际支付金额。
import java.math.BigDecimal;
import java.math.RoundingMode;public class ECommerceExample {public static void main(String[] args) {// 商品基础价格为199.99元BigDecimal basePrice = new BigDecimal("199.99");// 税率为5%BigDecimal taxRate = new BigDecimal("0.05");// 折扣为10%BigDecimal discountRate = new BigDecimal("0.10");// 计算含税总价BigDecimal totalWithTax = calculateTotalWithTax(basePrice, taxRate);System.out.println("含税总价: " + totalWithTax);// 应用折扣后的实际支付金额BigDecimal finalPayment = applyDiscount(totalWithTax, discountRate);System.out.println("应用折扣后的实际支付金额: " + finalPayment);}/*** 计算含税总价*/private static BigDecimal calculateTotalWithTax(BigDecimal basePrice, BigDecimal taxRate) {BigDecimal taxAmount = basePrice.multiply(taxRate).setScale(2, RoundingMode.HALF_UP);return basePrice.add(taxAmount);}/*** 应用折扣后的实际支付金额*/private static BigDecimal applyDiscount(BigDecimal totalWithTax, BigDecimal discountRate) {BigDecimal discountAmount = totalWithTax.multiply(discountRate).setScale(2, RoundingMode.HALF_UP);return totalWithTax.subtract(discountAmount);}
}

这个例子没什么难懂的地方,就不做解释了。



我们今天就到这里吧,下次再见!!!



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

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

相关文章

单片机基础模块学习——超声波传感器

一、超声波原理 左边发射超声波信号,右边接收超声波信号 左边的芯片用来处理超声波发射信号,中间的芯片用来处理接收的超声波信号 二、超声波原理图 T——transmit 发送R——Recieve 接收 U18芯片对输入的N_A1信号进行放大,然后输入给超声…

蓝桥杯之c++入门(一)【C++入门】

目录 前言5. 算术操作符5.1 算术操作符5.2 浮点数的除法5.3 负数取模5.4 数值溢出5.5 练习练习1:计算 ( a b ) ⋆ c (ab)^{\star}c (ab)⋆c练习2:带余除法练习3:整数个位练习4:整数十位练习5:时间转换练习6&#xff…

Redis --- 分布式锁的使用

我们在上篇博客高并发处理 --- 超卖问题一人一单解决方案讲述了两种锁解决业务的使用方法,但是这样不能让锁跨JVM也就是跨进程去使用,只能适用在单体项目中如下图: 为了解决这种场景,我们就需要用一个锁监视器对全部集群进行监视…

房屋租赁系统在数字化时代中如何重塑租赁服务与提升市场竞争力

内容概要 在当今快速发展的数字化时代,房屋租赁系统的作用愈发重要。随着市场需求的变化,租赁服务正面临着新的挑战与机遇。房屋租赁系统不仅仅是一个简单的管理工具,更是一个能够提升用户体验和市场竞争力的重要平台。其核心功能包括合同管…

INCOSE需求编写指南-附录 D: 交叉引用矩阵

附录 Appendix D: 交叉引用矩阵 Cross Reference Matrices Rules to Characteristics Cross Reference Matrix NRM Concepts and Activities to Characteristics Cross Reference Matrix Part 1 NRM Concepts and Activities to Characteristics Cross Reference Matrix Part…

Java---入门基础篇(上)

前言 本片文章主要讲了刚学Java的一些基础内容,例如注释,标识符,数据类型和变量,运算符,还有逻辑控制等,记录的很详细,带你从简单的知识点再到练习题.如果学习了c语言的小伙伴会发现,这篇文章的内容和c语言大致相同. 而在下一篇文章里,我会讲解方法和数组的使用,也是Java中基础…

新版231普通阿里滑块 自动化和逆向实现 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 补环境逆向 部分补环境 …

探索AI(chatgpt、文心一言、kimi等)提示词的奥秘

大家好,我是老六哥,我正在共享使用AI提高工作效率的技巧。欢迎关注我,共同提高使用AI的技能,让AI成功你的个人助理。 "AI提示词究竟是什么?" 这是许多初学者在接触AI时的共同疑问。 "我阅读了大量关于…

商密测评题库详解:商用密码应用安全性评估从业人员考核题库详细解析(9)

1. 申请商用密码测评机构需提交材料考点 根据《商用密码应用安全性测评机构管理办法(试行)》,申请成为商用密码应用安全性测评机构的单位应当提交的材料不包括( )。 A. 从事与普通密码相关工作情况的说明 B. 开展测评工作所需的软硬件及其他服务保障设施配备情况 C. 管…

Flink中的时间和窗口

在批处理统计中,我们可以等待一批数据都到齐后,统一处理。但是在实时处理统计中,我们是来一条就得处理一条,那么我们怎么统计最近一段时间内的数据呢?引入“窗口”。 所谓的“窗口”,一般就是划定的一段时…

Linux 进程概念

目录 一、前言 二、概念实例,正在执行的程序等 三、描述进程-PCB 四、组织进程 五、查看进程 ​编辑六、通过系统调用获取进程标示符 七、进程切换和上下文数据 1.进程切换 2.上下文数据 一、前言 在Linux中,每个执行的程序叫做进程&#xff…

allegro修改封闭图形线宽

说在前面 我们先把最优解说在前面,然后后面再说如果当时不熟悉软件的时候为了挖孔是用了shapes该怎么修改回来。 挖空最方便的方式是在cutout层画一个圆弧,下面开始图解,先add一个圆弧 z 最好是在画的时候就选择好层,如果忘记了后续再换回去也行,但好像软件有bug,此处并…

使用openwrt搭建ipsec隧道

背景:最近同事遇到了个ipsec问题,做的ipsec特性,ftp下载ipv6性能只有100kb, 正面定位该问题也蛮久了,项目没有用openwrt, 不过用了开源组件strongswan, 加密算法这些也是内核自带的,想着开源的不太可能有问题&#xff…

Day29(补)-【AI思考】-精准突围策略——从“时间贫困“到“效率自由“的逆袭方案

文章目录 精准突围策略——从"时间贫困"到"效率自由"的逆袭方案**第一步:目标熵减工程(建立四维坐标)** 与其他学习方法的结合**第二步:清华方法本土化移植** 与其他工具对比**~~第三步:游戏化改造…

手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)

手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码) 目录 手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)Stable Diffusion 原理图Stable Diffusion的原理解释Stable Diffusion 和Di…

vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列

最近在家过年闲的没事,于是研究起深度学习开发工具链的配置和安装,之前欲与天公试比高,尝试在win上用vscodecuda11.6vs2019的cl编译器搭建cuda c编程环境,最后惨败,沦为笑柄,痛定思痛,这次直接和…

【ESP32】ESP-IDF开发 | WiFi开发 | TCP传输控制协议 + TCP服务器和客户端例程

1. 简介 TCP(Transmission Control Protocol),全称传输控制协议。它的特点有以下几点:面向连接,每一个TCP连接只能是点对点的(一对一);提供可靠交付服务;提供全双工通信&…

AI时序预测: iTransformer算法代码深度解析

在之前的文章中,我对iTransformer的Paper进行了详细解析,具体文章如下: 文章链接:深度解析iTransformer:维度倒置与高效注意力机制的结合 今天,我将对iTransformer代码进行解析。回顾Paper,我…

某盾Blackbox参数参数逆向

以前叫同盾,现在改名了,叫小盾安全,好像不做验证码了

docker中运行的MySQL怎么修改密码

1,进入MySQL容器 docker exec -it 容器名 bash 我运行了 docker ps命令查看。正在运行的容器名称。可以看到MySQL的我起名为db docker exec -it db bash 这样就成功的进入到容器中了。 2,登录MySQL中 mysql -u 用户名 -p 回车 密码 mysql -u root -p roo…