当前位置: 首页 > news >正文

Java 大数字运算之 BigDecimal 类

在 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 参数支持的处理模式。

例:

        编写一个 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

 

http://www.lryc.cn/news/97257.html

相关文章:

  • MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)
  • MY.CNF
  • SpringBoot IOC与AOP(一)
  • JVM运行时数据区——方法区的垃圾回收
  • LeetCode213.House-Robber-II<打家劫舍II>
  • 订单系统问题汇总
  • springboot热加载spring-boot-devtools:
  • QT学习之旅 - 一个QT的基本项目
  • 大数据课程D2——hadoop的概述
  • 使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)
  • 揭秘APT团体常用的秘密武器——AsyncRAT
  • Flutter Widget Life Cycle 组件生命周期
  • LeetCode面向运气之Javascript—第2600题-K件物品的最大和-94.68%
  • 数学建模学习(4):TOPSIS 综合评价模型及编程实战
  • PHP之Smarty使用以及框架display和assign原理
  • 《TCP IP网络编程》第十一章
  • Folx Pro 5 最好用的Mac磁力链接BT种子下载工具
  • Redis 数据库的高可用
  • elementPlus dialog组件设置可拖动,当内容高度大于视口高度拖动显示异常的解决办法
  • 亲测解决Git inflate: data stream error (incorrect data check)
  • Ansible 自动化运维工具
  • node.js 爬虫图片下载
  • VAE-根据李宏毅视频总结的最通俗理解
  • 【LangChain】检索器之上下文压缩
  • uniapp 语音文本播报功能
  • 腾讯云高IO型云服务器CPU型号处理器主频性能
  • 【数据结构】实验八:树
  • kafka消费者api和分区分配和offset消费
  • 【驱动开发day4作业】
  • Ubuntu 20.04 Ubuntu18.04安装录屏软件Kazam