首页 > 其他分享 >BigDecimal精度理解

BigDecimal精度理解

时间:2024-05-07 09:45:07浏览次数:13  
标签:BigDecimal valueOf 次倍 add 理解 计算 精度

BigDecimal的类声明以及几个属性:

接下来我们可以debug来看下其运行原理

        BigDecimal bigDecimal1 = BigDecimal.valueOf(2.88);
        BigDecimal bigDecimal2 = BigDecimal.valueOf(3.5);
        BigDecimal resDecimal = bigDecimal1.add(bigDecimal2);
        System.out.println(resDecimal);

 可以看出是把数值扩大了10的n次倍,并记录了n值,然后再使用add方法计算。

 总结:

所以可以得出结论:BigDecimal在计算时,实际会把数值扩大10的n次倍,变成一个long型整数进行计算,整数计算时自然可以实现精度不丢失。同时结合精度scale,实现最终结果的计算。

 

标签:BigDecimal,valueOf,次倍,add,理解,计算,精度
From: https://www.cnblogs.com/nxjblog/p/18176542

相关文章

  • 说说你对盒子模型的理解?
    一、是什么当对一个文档进行布局(layout)的时候,浏览器的渲染引擎会根据标准之一的CSS基础框盒模型(CSSbasicboxmodel),将所有元素表示为一个个矩形的盒子(box)一个盒子由四个部分组成:content、padding、border、margincontent,即实际内容,显示文本和图像boreder,即边框,围绕元素内......
  • verilog 语义理解
    在verilog使用过程中,产生以下几个问题wire和reg的语义是什么,有什么不同?阻塞赋值和非阻塞赋值的语义是什么?assign和always语义是什么?弄清语义是为了正确的使用,不仅是结果正确,比如有时候可能两种写法得到的结果是一样的但是从语义来看会有一种是更适合当前语境的......
  • STM32F1和STM32F4系列DMA的不同之处——对STM32的DMA的工作机制的一些理解
    喜欢用STM32的DMA功能。一方面STM32的DMA和MPU的DMA一样,可以提高数据传输效率。另一方面,作为一种MCU上的DMA,它可以提高针对外设(peripheral)的数据传输的实时性,改变了传统MCU只能用定时中断实现实时控制的方法。比较STM32F4和STM32F1系列的DMA控制器,可以发现区别主要有三:1)增加了DMA......
  • wchar_t类型理解
    wchar_t(宽字符)类型1、什么是wchar_t(宽字符)char类型通常只有8位,许多语言(如中文、日文、韩文等)的字符集包含的字符数目远超过256个,因此char类型无法直接表示这些字符。其大小通常为16位或32位(具体取决于编译器和平台),wchar_t能够表示更多的字符。2、赋值方法前面多一......
  • 深入学习和理解Django模板层:构建动态页面
    title:深入学习和理解Django模板层:构建动态页面date:2024/5/520:53:51updated:2024/5/520:53:51categories:后端开发tags:Django模板表单处理静态文件国际化性能优化安全防护部署实践第一章:模板语法基础Django模板语法介绍Django模板语法是一种简洁而......
  • 高精度
    这是摘自https://blog.csdn.net/SkeletonKing233/article/details/92200315的一份高精度模板#defineFOR(i,a,b)for(inti=a;i<=b;i++)#define_FOR(i,a,b)for(inti=a;i>=b;i--)structBigInt{staticconstintM=1000;intnum[M+10]......
  • 深入学习和理解Django视图层:处理请求与响应
    title:深入学习和理解Django视图层:处理请求与响应date:2024/5/417:47:55updated:2024/5/417:47:55categories:后端开发tags:Django请求处理响应生成模板渲染表单处理中间件异常处理第一章:Django框架概述1.1什么是Django?Django是一个高级的PythonWeb......
  • 程序中,对锁的理解
    在并发编程中,加锁是为了保证数据的完整性和一致性,在程序中,特别是并发编程的上下文中,**锁**(Lock)是一种同步机制,用于控制多个线程或进程对共享资源的访问,以防止数据竞争(DataRace)和保持数据一致性。当多个执行单元(如线程)试图同时访问或修改同一份共享资源时,如果没有适当的同步措......
  • Python深入理解*和**含义和应用
    本文源代码:https://gitee.com/obullxl/PythonCS/tree/master/CS-CY2405Python中*和**很常见禅师在阅读Python代码过程中,经常看到一个函数或方法的入参是*args和**kwargs(如:deffunc(*args,**kwargs)等)形式,或者在调用函数或方法时,在入参的元组和列表前面增加1个*号(如:func(*(1,2,......
  • 我对操作系统的理解
    当我们谈论操作系统时,我们可以将其视为计算机的“大管家”或“资源调配师”。它管理着计算机的硬件和软件资源,确保它们得到合理的分配和使用。具体来说,操作系统具有以下几个核心功能:进程管理:操作系统负责协调和控制计算机上运行的程序。它确保每个进程都能得到适当的CPU时间,从而实......