在Java中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。这两个类用于高精度计算,其中BigInteger 类是针对整型大数字的处理类,而 BigDecimal 类是针对大小数的处理类。今天主要讲一下BigDecimal 类!

BigDecimal 类

BigInteger 和 BigDecimal 都能实现大数字的运算,不同的是 BigDecimal 加入了小数的概念。一般的 float 和 double 类型数据只能用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到 BigDecimal 类。BigDecimal 类支持任何精度的浮点数,可以用来精确计算货币值。

BigDecimal 常用的构造方法如下。

  • BigDecimal(double val):实例化时将双精度型转换为 BigDecimal 类型。

  • BigDecimal(String val):实例化时将字符串形式转换为 BigDecimal 类型。

BigDecimal 类的方法可以用来做超大浮点数的运算,像加、减、乘和除等。在所有运算中,除法运算是最复杂的,因为在除不尽的情况下,末位小数的处理方式是需要考虑的。

下面列出了 BigDecimal 类用于实现加、减、乘和除运算的方法。

BigDecimal add(BigDecimal augend) // 加法操作

BigDecimal subtract(BigDecimal subtrahend) // 减法操作

BigDecimal multiply(BigDecimal multiplieand) // 乘法操作

BigDecimal divide(BigDecimal divisor,int scale,int roundingMode ) // 除法操作

其中,divide() 方法的 3 个参数分别表示除数、商的小数点后的位数和近似值处理模式。

下表列出了 roundingMode 参数支持的处理模式。

oundingMode参数支持的处理模式
模式名称 说明
BigDecimal.ROUND_UP 商的最后一位如果大于 0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN 商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING 商如果是正数,按照 ROUND_UP 模式处理;如果是负数,按照 ROUND_DOWN
模式处理
BigDecimal.ROUND_FLOOR 与 ROUND_CELING 模式相反,商如果是正数,按照 ROUND_DOWN 模式处理;
如果是负数,按照 ROUND_UP 模式处理
BigDecimal.ROUND_HALF_ DOWN 对商进行五舍六入操作。如果商最后一位小于等于 5,则做舍弃操作,否则对最后
一位进行进位操作
BigDecimal.ROUND_HALF_UP 对商进行四舍五入操作。如果商最后一位小于 5,则做舍弃操作,否则对最后一位
进行进位操作
BigDecimal.ROUND_HALF_EVEN 如果商的倒数第二位是奇数,则按照 ROUND_HALF_UP 处理;如果是偶数,则按
照 ROUND_HALF_DOWN 处理

例:

编写一个 Java 程序,演示如何使用 BigDecimal 类提供的方法对数字执行运算,并输出结果。具体实现代码如下:

import java.math.BigDecimal;
import java.util.Scanner;public class Test10 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入一个数字:");// 保存用户输入的数字double num = input.nextDouble();// 使用输入的数字创建BigDecimal对象BigDecimal bd = new BigDecimal(num);// 计算大数字加上99.154的结果System.out.println("加法操作结果:" + bd.add(new BigDecimal(99.154)));// 计算大数字减去-25.157904的结果System.out.println("减法操作结果:" + bd.subtract(new BigDecimal(-25.157904)));// 计算大数字乘以3.5的结果System.out.println("乘法操作结果:" + bd.multiply(new BigDecimal(3.5)));// 计算大数字除以3.14的结果,并保留小数后2位System.out.println("除法操作结果(保留 2 位小数):" + bd.divide(new BigDecimal(3.14), 2, BigDecimal.ROUND_CEILING));// 计算大数字除以3.14的结果,并保留小数后5位System.out.println("除法操作结果(保留 5 位小数):" + bd.divide(new BigDecimal(3.14), 5, BigDecimal.ROUND_CEILING));}
}

上述代码将用户输入的数字保存到 num 变量中,然后调用“newBigDecimal(num)”方法来创建 BigDecimal 对象。接下来的代码演示了如何调用 BigDecimal 类提供的运算方法,运行效果如下所示。

请输入一个数字:
100
加法操作结果:199.15399999999999636202119290828704833984375
减法操作结果:125.157903999999998490011421381495893001556396484375
乘法操作结果:350.0
除法操作结果(保留 2 位小数):31.85
除法操作结果(保留 5 位小数):31.84714

推荐学习课程

Java基础:

Java300集,Java必备优质视频_手把手图解学习Java,让学习成为一种享受

Java项目:

【Java游戏项目】1小时教你用Java语言做经典扫雷游戏_手把手教你开发游戏

【Java毕业设计】OA办公系统项目实战_OA员工管理系统项目_java开发

Java快速入门到精通—大数字运算(BigDecimal 类)相关推荐

  1. Java快速入门到精通— Java break语句详解

    所有流行的编程语言中都有循环语句.JAVA 中采用的循环语句与C语言中的循环语句相似,主要有 while.do-while 和 for! 那么在某些时候需要在某种条件出现时强行终止循环,而不是等到循环 ...

  2. 4、大数字运算(BigInteger类和BigDecimal类)

    在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 BigInteger 类是针对 ...

  3. Java大数字运算(BigInteger类和BigDecimal类)

    Java中的超大数BIgInteger和BigDecimal 在我们处理大位数运算的时候,我们经常用的int和long类型的数已经不能够满足我们的运算了,那么这个时候就需要用到一个超大数来运算,这个时 ...

  4. Java从入门到精通08-二进制、位运算、移位运算

    Java从入门到精通08-二进制.位运算.移位运算 二进制(Binary)数用0和1两个数字及其组合来表示任何数.进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右到左 ...

  5. 视频教程-Spring框架快速入门到精通-Java

    Spring框架快速入门到精通 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥18.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...

  6. 视频教程-mybatis快速入门到精通-Java

    mybatis快速入门到精通 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥18.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 A ...

  7. java从入门到精通第四版明日科技书籍简介及下载

    Java从入门到精通(第4版)(附光盘) 平装 – 2016年10月20日 <Java从入门到精通(第4版)(附光盘)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用 ...

  8. Java从入门到精通十一(javaIO流)

    Java从入门到精通十一(javaIO流) IO引入 字节流和字符流(一些说明) 字节流没有用到缓冲区并不是没有用到内存 为什么输入流是读数据,而输出流是写数据? 字节流说明 字节输入流读数据的方法 ...

  9. 第一阶段:JAVA快速入门

    文章目录 1 第一阶段 java入门 1.1 java快速入门及第一个程序 1.1.1 java的特性和优势 1.1.2 java应用程序的运行机制 1.1.3 JVM.JRE和JDK 1.1.4 j ...

最新文章

  1. 通过文件读写方式实现Matlab和Modelsim的联合仿真
  2. iOS万能跳转界面的方法
  3. java里面运行js_在java中利用rhino执行javascript
  4. 更改Java包名称如何改变我的系统架构
  5. Leaning perl 第2章练习题答案
  6. 华语歌坛年度压轴 王力宏新专辑《心中的日月》
  7. nvm 下载node 下载不下来_挑战不可能最新版手游下载_挑战不可能最新版安卓版下载...
  8. mysql的r2dbc_使用R2DBC实现数据库的响应式访问
  9. c3p0数据库连接池使用步骤c3p0配置报错处理
  10. Sk32k144:生成hex文件和烧写(jflash)
  11. 工作中使用到的单词(软件开发)_20210402备份
  12. 苹果手机如何深度清理_手机应用 | 推荐5款深度清理手机内存的软件
  13. 搭建Web服务器建网站的步骤
  14. 移动端网站设计需要注意的四要点
  15. Docker学习之day01 Docker的前世今生
  16. android als传感器,环境光传感器(ALS)背光控制解决方案
  17. 微信从原版到现在所有界面图片_微信6年来首次更换启动界面地球图片:来感受一下...
  18. R 用回归来做 ANOVA
  19. 非常好用的开源矢量地图切片工具
  20. 如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有完数。

热门文章

  1. 用python发送叮叮消息
  2. 交换机应用之端口模式(access、trunk和hybird)、是否标记(tag、untag)、端口缺省vlan(pvid、native id)
  3. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传
  4. 人工智能(强化学习)
  5. 223611-42-5,S-acetyl-PEG4-alcohol含有硫乙酰基的PEG连接剂
  6. Git 使用过程中遇到的问题以及解决办法
  7. 第二章 编程初步 Ivor Horton
  8. k8s pod控制器详解(ReplicaSet、Deployment、Horizontal Pod Autoscaler)
  9. 实现App跳转到应用商店
  10. Navicat Premium 12 中文版v12.1.19