Java BigDecimal常用的方法介绍

        在 Java 中,`BigDecimal` 类是一个用于高精度十进制浮点运算的类。与 `double` 和 `float` 类型相比,`BigDecimal` 提供了一个精确的十进制控制,并且在商业计算中非常重要,因为它可以避免由于浮点数精度不准确而导致的错误。


        以下是 `BigDecimal` 类的一些常用方法,以及简单的例子来说明它们的用法。
        常用方法
        1. **构造函数**
   - `BigDecimal(String val)`: 创建一个 BigDecimal 对象,其值等于参数的字符串表示。
   - `BigDecimal(double val)`: 创建一个 BigDecimal 对象,其值等于参数的 double 表示。
   - `BigDecimal(BigDecimal val)`: 创建一个 BigDecimal 对象,其值等于参数的 BigDecimal 表示。
        2. **基本数学运算**
   - `add(BigDecimal augend)`: 加法。
   - `subtract(BigDecimal subtrahend)`: 减法。
   - `multiply(BigDecimal multiplicand)`: 乘法。
   - `divide(BigDecimal divisor)`: 除法。
        3. **舍入和格式化**
   - `setScale(int scale, RoundingMode roundingMode)`: 设置小数点后的精度,并指定舍入模式。
   - `stripTrailingZeros()`: 移除小数点后的所有零。
   - `setScale(int scale)`: 设置小数点后的精度,使用银行家舍入法。
        4. **比较操作**
   - `compareTo(BigDecimal val)`: 比较两个 BigDecimal 对象的值。
   - `equals(Object x)`: 判断两个 BigDecimal 对象是否相等。
   - `signum()`: 返回 1、0 或 -1,表示 BigDecimal 对象的符号。
        5. **其他方法**
   - `int intValue()`: 返回 BigDecimal 对象的小数部分四舍五入后的整数值。
   - `long longValue()`: 返回 BigDecimal 对象的小数部分四舍五入后的长整数值。
   - `float floatValue()`: 返回 BigDecimal 对象的小数部分四舍五入后的浮点数值。
   - `double doubleValue()`: 返回 BigDecimal 对象的小数部分四舍五入后的双精度浮点数值。
        简单例子
        下面是一些使用 `BigDecimal` 类的简单例子:
        创建 BigDecimal 对象


BigDecimal bd1 = new BigDecimal("123.456");
BigDecimal bd2 = new BigDecimal(123.456);
BigDecimal bd3 = bd1.setScale(2);


        加法


BigDecimal sum = bd1.add(bd2);
System.out.println("Sum: " + sum); // 输出: Sum: 246.912


        减法


BigDecimal difference = bd1.subtract(bd2);
System.out.println("Difference: " + difference); // 输出: Difference: -119.454


        乘法


BigDecimal product = bd1.multiply(bd2);
System.out.println("Product: " + product); // 输出: Product: 15206.012


        除法


BigDecimal quotient = bd1.divide(bd2);
System.out.println("Quotient: " + quotient); // 输出: Quotient: 0.5


        舍入


BigDecimal rounded = bd1.setScale(2, RoundingMode.HALF_UP);
System.out.println("Rounded: " + rounded); // 输出: Rounded: 123.46


        比较


int compare = bd1.compareTo(bd2);
System.out.println("Compare: " + compare); // 输出: Compare: -1


        格式化输出


String formatted = bd1.stripTrailingZeros().toPlainString();
System.out.println("Formatted: " + formatted); // 输出: Formatted: 123.456


        获取基本数值


int intValue = bd1.intValue();
System.out.println("Int value: " + intValue); // 输出: Int value: 123


        使用 BigDecimal 进行货币计算
在商业应用中,货币计算需要非常精确,因此使用 `BigDecimal` 来计算是非常重要的。下面是一个简单的例子,用于计算消费税。


BigDecimal price = new BigDecimal("100.00");
BigDecimal taxRate = new BigDecimal("0.07");
// 计算含税价格
BigDecimal tax = price.multiply(taxRate);
BigDecimal total = price.add(tax);
System.out.println("Price: " + price); // 输出: Price: 100.00
System.out.println("Tax: " + tax); // 输出: Tax: 7.00
System.out.println("Total: " + total); // 输出: Total: 107.00


        在这个例子中,我们首先创建了两个 `BigDecimal` 对象来表示价格和税率。然后,我们计算了税额,并将税额加到原始价格上,以得到含税价格。
        总结
        `BigDecimal` 类在 Java 中提供了高精度的十进制浮点运算能力,这对于需要精确计算的应用程序(如金融应用、科学计算等)至关重要。通过使用 `BigDecimal`,开发者可以避免由于浮点数精度问题导致的计算错误。
       

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

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

相关文章

前端工程化【01】:核心思想、发展历程和面临挑战

前端工程化是指将前端开发中的工具、流程和方法进行规范化和自动化,以提高前端开发效率、提升代码质量和项目可维护性的一种开发方式。通过前端工程化,可以将前端开发过程中的重复工作自动化,减少开发者的重复劳动,提高开发效率。…

谷粒学院--在线教育实战项目【一】

谷粒学院--在线教育实战项目【一】 一、项目概述1.1.项目来源1.2.功能简介1.3.技术架构 二、Mybatis-Plus概述2.1.简介2.2.特性 三、Mybatis-Plus入门3.1.创建数据库3.2.创建 User 表3.3.初始化一个SpringBoot工程3.4.在Pom文件中引入SpringBoot和Mybatis-Plus相关依赖3.5.第一…

图机器学习(1)--导论

0 引入 为什么是图?图是描述关联数据的通用语言。 前期的研究:节点之间独立同分布,没有关系。 图:节点之间有关联关系。 0.1 图数据举例 0.2 问题描述 黏菌按照人类规划的铁路网进行生长。 复杂域具有丰富的关系结构&#xf…

开放式高实时高性能PLC控制器解决方案-基于米尔电子STM32MP135

前言 随着工业数字化进程加速与IT/OT深入融合,不断增加的OT核心数据已经逐步成为工业自动化行业的核心资产,而OT层数据具备高实时、高精度、冗余度高、数据量大等等特点,如何获取更加精准的OT数据对数字化进程起到至关重要的作用,…

虽说主业搞前端,看到如此漂亮的网页UI,也是挪不开眼呀。

漂亮的网页UI能够吸引人的眼球,给人留下深刻的印象。作为前端开发人员,可以通过不断学习和掌握设计技巧和工具,提升自己的UI设计能力,为用户提供更好的视觉体验。 以下是一些提升网页UI设计能力的建议: 学习设计基础知…

MySQL基础(未完待续...)

数据库基础 MySQL概述 数据库相关概念 名称作用简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System (DBMS)SQL操作关系型数据库的编程语言,定义…

个人项目介绍4:三维园区篇

个人项目介绍: 地图铁路线路篇 地球卫星篇 火车站篇 三维园区篇 项目需求: 1.按比例全景显示三维园区 2.精确显示园区内设备设施 3.实时显示设备报警信息 4.显示园区内摄像监控设备,并可点击显示监控视频流 5.显示园区内的重大危险源和风险分布 …

算法题 — 三个数的最大乘机

三个数的最大乘机 整型数组 nums,在数组中找出由三个数字组成的最大乘机,并输出这个乘积。(乘积不会越界) 重点考察:线性扫描 排序法: public static void main(String[] args) {System.out.println(so…

SpringMVC实用技术

1.校验框架 1.表单校验框架入门 表单校验的重要性 数据可以随意输入,导致错误的结果。表单校验保障了数据有效性、安全性 表单校验分类 校验位置: 客户端校验 服务端校验 校验内容与对应方式: 格式校验 客户端:使用Js技术…

MySQL学习Day24—数据库的设计规范

一、数据库设计的重要性: 1.糟糕的数据库设计产生的问题: (1)数据冗余、信息重复、存储空间浪费 (2)数据更新、插入、删除的异常 (3)无法正确表示信息 (4)丢失有效信息 (5)程序性能差 2.良好的数据库设计有以下优点: (1)节省数据的存储空间 (2)能够保证数据的完整性 …

多层菜单的实现方案(含HierarchicalDataTemplate使用)

1、递归 下面是Winform的递归添加菜单栏数据,数据设置好父子id方便递归使用 在TreeView的控件窗口加载时,调用递归加载菜单 private void LoadTvMenu(){this.nodeList objService.GetAllMenu(); // 通过Service得到全部数据// 创建一个根节点this.t…

事务控制失效的八种常见原因

一、非public修饰的方法 Transactional注解只能在在public修饰的方法下使用。 /*** 私有方法上的注解,不生效(因私有方法Spring扫描不到该方法,所以无法生成代理)*/ Transactional private boolean test() {//test code } 二、…