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

news2025/1/27 8:49:01

前言:

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

今天是第五个  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.coloradmin.cn/o/2283862.html

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

相关文章

【记录】日常|从零散记录到博客之星Top300的成长之路

文章目录 shandianchengzi 2024 年度盘点概述写作风格简介2024年的创作内容总结 shandianchengzi 2024 年度盘点 概述 2024年及2025年至今我创作了786即84篇文章,加上这篇就是85篇。 很荣幸这次居然能够入选博客之星Top300,这个排名在我之前的所有年份…

定时器按键tim_key模版

低优先级放在高优先级内势必是程序卡死 把高优先级放到低优先级内,会使程序卡死 可修改 Debuger调试方法 Pwm rcc #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPI…

Swing使用MVC模型架构

什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…

ui-automator定位官网文档下载及使用

一、ui-automator定位官网文档简介及下载 AndroidUiAutomator:移动端特有的定位方式,uiautomator是java实现的,定位类型必须写成java类型 官方地址:https://developer.android.com/training/testing/ui-automator.html#ui-autom…

gitee——报错修改本地密码

有时候当我们向远端push本地的仓库时会有一些报错的行为。 如下: 这是因为我们在gitee修改了密码时,本地还没有更新提交,总是报错 解决修改密码报错 如下: 1.在本地点击搜索栏找到控制面板 步骤如下

小盒科技携手体验家,优化智能教育服务体验,打造在线教育新高度

北京小盒科技有限公司(简称“小盒科技”,由“作业盒子”更名而来)是一家专注于教育科技的公司,致力于利用人工智能、大数据等先进技术,为中小学教育提供创新的解决方案和产品。 近日,「小盒科技」携手体…

Docker Hub 全面解析及应对策略

在现代 DevOps 和容器化应用开发中,Docker Hub 是一个不可或缺的工具。然而,一些地区或企业对 Docker Hub 的访问受到限制,甚至全面禁止。这种现象引发了开发者和运维人员的广泛关注。那么,为什么 Docker Hub 会被禁用&#xff1f…

分布式理解

分布式 如何理解分布式 狭义的分布是指,指多台PC在地理位置上分布在不同的地方。 分布式系统 分布式系**统:**多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任…

macOS使用LLVM官方发布的tar.xz来安装Clang编译器

之前笔者写过一篇博文ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器介绍了Ubuntu下使用官方发布的tar.xz包来安装Clang编译。官方发布的版本中也有MacOS版本的tar.xz,那MacOS应该也是可以安装的。 笔者2015款MBP笔记本,CPU是intel的,出厂…

ppp综合实验

IP地址 r1 r2 r3 r4 hdlc封装 pap认证 r2 r3 chap认证 r2 r4 MGRE 主认证 [r1]int Tunnel 0/0/0 [r1-Tunnel0/0/0]ip add 192.168.4.1 24 [r1-Tunnel0/0/0]tunnel-protocol gre p2mp [r1-Tunnel0/0/0]source 12.1.1.1 [r1-Tunnel0/0/0]nhrp entry multicast dynamic [r1-Tu…

HBuilderX构建Vue项目

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl HBuilderX概述 HBuilderX是一款专为开发者设计的高效开发工具,致力于提升开发者的编码效率和体验。HBuilderX既适合追求极致效率的极客,也适合希望简…

基于微信小程序的英语学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

使用 Confluent Cloud 的 Elasticsearch Connector 部署 Elastic Agent

作者:来自 Elastic Nima Rezainia Confluent Cloud 用户现在可以使用更新后的 Elasticsearch Sink Connector 与 Elastic Agent 和 Elastic Integrations 来实现完全托管且高度可扩展的数据提取架构。 Elastic 和 Confluent 是关键的技术合作伙伴,我们很…

JDK17 HashMap

HashMap ArrayList用动态数组存放元素,而HashMap用动态数组(桶)存储键值对。 如果两个键值对映射到桶同一个索引,则称为散列冲突。HashMap采用拉链法解决冲突,即桶中每个索引指向一个链表或者红黑树,多个键…

ansible自动化运维实战--通过role远程部署nginx并配置(8)

文章目录 1、准备工作2、创建角色结构3、编写任务4、准备配置文件(金甲模板)5、编写变量6、编写处理程序7、编写剧本8、执行剧本Playbook9、验证-游览器访问每台主机的nginx页面 在 Ansible 中,使用角色(Role)来远程部…

Python网络自动化运维---用户交互模块

文章目录 目录 文章目录 前言 实验环境准备 一.input函数 代码分段解析 二.getpass模块 前言 在前面的SSH模块章节中,我们都是将提供SSH服务的设备的账户/密码直接写入到python代码中,这样很容易导致账户/密码泄露,而使用Python中的用户交…

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明,虽然结果正确,但是,大模型既绕了弯路,又有数值计算错误。 与前面相同,再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…

mybatis(78/134)

前天学了很多&#xff0c;关于java的反射机制&#xff0c;其实跳过了new对象&#xff0c;然后底层生成了字节码&#xff0c;创建了对应的编码。手搓了一遍源码&#xff0c;还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …

数据分箱 baggingboosting onehot独热编码 woe编码 sklearn的ensemble(集成学习)

目录 数据分箱就是将连续变量离散化。 bagging&boosting onehot独热编码 独热编码的结果如下&#xff1a; woe编码 WOE编码的基本原理 步骤一&#xff1a;计算WOE 步骤二&#xff1a;应用WOE WOE编码的优点 示例 数据示例 步骤一&#xff1a;计算每个类别的违约…

企业微信开发010_使用WxJava企业微信开发框架_封装第三方应用企业微信开发003_并且实现多企业授权访问---企业微信开发012

继续来看吧,上一节,已经把config部分,代码都拿过来了: 并且把企业微信第三方应用开发部分,对应的config的配置,mutiltp 代码拿过来了,并且把yml中的配置也给出了. 然后,这里说一下config中的内容,到时候自己看也可以看懂 其实就是封装了,当系统启动,加载企微模块,这个时候,会…