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

浅挖Java的BigDecimal类

浅挖JavaBigDecimal

特点:比浮点运算精确,一般会用于计算金额等

BigDecimal 底层实现

  1. 内部字段

    • BigDecimal类的核心字段包括:

      private final BigInteger intVal; // 表示数字的整数部分,精度极高
      private final int scale;         // 表示小数位数
      private transient int precision; // 可选字段,表示总有效数字位数(非每次都计算)
      

      BigInteger是任意精度的整数类型,用于存储整个数字的值。通过将小数部分的精度单独存储为 scaleBigDecimal 实现了浮点数计算的任意精度。

  2. 数值表示方式

    • BigDecimal 将数值存储为整数(通过 BigInteger 实现),并通过 scale 控制小数位置。例如,123.45 将存储为 12345scale2
    • scale 定义了小数位数。当 scale 为正数时,表示小数位数;为负数时,则表示数值按 10 的整数倍放大。
  3. 精确计算

    • BigDecimal 的计算方法(如加、减、乘、除)不会造成精度丢失。乘除法运算会根据 scale 自动调整结果的精度。
    • doublefloat 类型的浮点数不同,BigDecimal 的数值不会受限于机器浮点表示的误差问题,可以实现无限精度的十进制数计算。
  4. 不可变性

    • BigDecimal 是不可变类,每次运算都会返回一个新的对象,不会修改原始对象的值。这保证了线程安全性以及数值计算的稳定性。
  5. 舍入模式

    • BigDecimal 提供了多种舍入模式,如 HALF_UPHALF_DOWN 等,可以在除法或精度调整时选择合适的舍入模式,以确保计算的精度符合要求。

示例代码

import java.math.BigDecimal;public class BigDecimalExample {public static void main(String[] args) {BigDecimal a = new BigDecimal("123.45");BigDecimal b = new BigDecimal("67.89");BigDecimal result = a.add(b);System.out.println("结果: " + result); // 精确结果}
}

所以BigDecimal 的的核心是底层,基于 BigInteger 存储高精度整数值,通过 scale 控制小数位置,从而实现任意精度的十进制数表示和计算。


http://www.mrgr.cn/news/69524.html

相关文章:

  • 怎么样绑定域名到AWS(亚马逊云)服务器
  • 缓存冲突(Cache Conflict)
  • 探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
  • Python 占位语句 pass
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • D63【python 接口自动化学习】- python基础之数据库
  • 【JAVA】Java基础—面向对象编程:类与对象-对象的创建
  • 使用Python实现图像的手绘风格效果
  • STM32 4X4 键盘
  • 3.1 > Shell
  • python实战案例——爬取A站视频,m3u8格式视频抓取(内含完整代码!)
  • 离散数学的一些个人另类理解
  • I/O操作完成事件
  • Linux 下 mysql 9.1 安装设置初始密码 【附脚本】
  • DreamCut:AI驱动的视频编辑与屏幕录制工具
  • 从零开始的python学习(四)P54+P55+P56+P57+P58
  • 模型训练中GPU利用率低?
  • python编写学生管理系统
  • 树莓派安装FreeSWITCH
  • 背包问题(三)
  • STM32F103C8T6单片机
  • 边缘计算在智能交通系统中的应用
  • 科研绘图系列:R语言组合多个不同图形(violin density barplot heatmap)
  • Python毕业设计选题:基于django+vue的荣誉证书管理系统
  • 数据分析:16s差异分析DESeq2 | Corncob | MaAsLin2 | ALDEx2
  • Windows下Python环境安装GDAL