BigDecimal简介

  1. BigDecimal用来对需要更大或更小的数进行任意精度的运算。
  2. 在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。
  3. 尽量使用参数类型为String的构造函数。
  4. BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。

BigDecimal构造方法

  1. BigDecimal(BigInteger val)
    将 BigInteger转换成 BigDecimal
  2. BigDecimal(char[] in)
    一个转换的字符数组表示 BigDecimal成 BigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造
  3. BigDecimal(double val)
    将 double转换为 BigDecimal ,这是 double的二进制浮点值的精确十进制表示
  4. BigDecimal(int val)
    将 int成 BigDecimal
  5. BigDecimal(long val)
    将 long成 BigDecimal
  6. BigDecimal(String val)
    将BigDecimal的字符串表示 BigDecimal转换为 BigDecimal

BigDecimal 常用方法 加减乘除运算

BigDecimal a = new BigDecimal(6);
BigDecimal b = new BigDecimal(5);
a.add(b);  //a+b  加
a.subtract(b); // a-b 减
a.multiply(b); // a*b 乘
a.divide(b);// a/b 除
a.doubleValue();//转换成双精度 double类型
a.floatValue(); //转换成单精度 float类型
a.longValue(); //转换成长整形 long 类型
a.intValue();  //转换成整形 int 类型
a.pow(3);//a的3次方
a.abs();//a的绝对值
a.negate();//a的负数

BigDecimal数值比较

BigDecimal a = new BigDecimal(6);
int i = a.compareTo(BigDecimal.ZERO); //和0做比较
i==-1;//表示a小于0
i==0;//表示a=0
i==1;//表示a大于0
boolean b1 = a.subtract(b).compareTo(BigDecimal.ZERO) > 0;//判断a-b是否大于0

BigDecimal常见异常

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。
原因:
JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。
解决办法:

a.divide(b,4,RoundingMode.HALF_UP));

第二个参数是保留小数位数
第三个代表模式
模式:

  1. ROUND_UP 始终对前一位加1 只入不舍
  2. ROUND_DOWN 始终不对小数进行改变 只舍不入
  3. ROUND_CEILING 如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。
  4. ROUND_FLOOR如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同。
  5. ROUND_HALF_UP 四舍五入
  6. ROUND_HALF_DOWN 五舍六入
  7. ROUND_HALF_EVEN 如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

总结

BigDecimal 主要用来操作(大)浮点数,BigInteger 主要用来操作大整数(超过 long 类型)。

BigDecimal 的实现利用到了 BigInteger, 所不同的是 BigDecimal 加入了小数位的概念。

java.math.BigDecimal详解及加减乘除计算相关推荐

  1. java 中 BigDecimal 详解

    首先,学习一个东西,我们都必须要带着问题去学,这边我分为 [为什么?][是什么?][怎么用?] [为什么要用BigDecimal?] 首先,我们先看一下,下面这个现象 那为什么会出现这种情况呢? 因为 ...

  2. 不能用float、double 存储金额——BigDecimal详解

    1.为什么不能使用 float 存储金额? public class FloatTest {public static void main(String[] args) {float f1 = 6.6 ...

  3. java.math.BigDecimal类multiply的使用

    java.math.BigInteger.multiply(BigInteger val) 返回一个BigInteger,其值是 (this * val). 声明 以下是java.math.BigIn ...

  4. Java BigDecimal详解

    Java BigDecimal详解 1. BigDecimal概述 2. BigDecimal方法 2.1 BigDecimal常用构造函数 2.2 BigDecimal常用方法详解 3. BigDe ...

  5. java.math.BigDecimal的用法-商业计算

    如果我们编译运行下面这个程序会看到什么? public class test{      public static void main(String [] args){          Syste ...

  6. java无限循环小数_java基础——java无限循环小数判定问题以及BigDecimal详解

    java基础--java无限循环小数判定问题以及BigDecimal详解 rtk   jmp   目录   big   get   无限循环   style   无限 罢谮烈糜讼市智猩昧锥父兹登htt ...

  7. java.math.BigDecimal记录

    2019独角兽企业重金招聘Python工程师标准>>> 1.引言 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计 ...

  8. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  9. java多线程学习-java.util.concurrent详解

    http://janeky.iteye.com/category/124727 java多线程学习-java.util.concurrent详解(一) Latch/Barrier 博客分类: java ...

  10. java double丢失精度问题,加减乘除计算出错出现99999

    问题一 原理:在使用double计算时,经常会存在精度丢失,总是在一个正确的结果左右偏0.0000**1,经常会因为精度丢失而导致程序处理流程出错.所有在进行财务相关计算时,需要使用BigDecima ...

最新文章

  1. tensorflow 教程 梯度下降法实现线性回归问题
  2. 字节流 system.in
  3. 用不同的姿势求逆序对(复习篇)
  4. 【转】hadoop深入研究:(十一)——序列化与Writable实现
  5. 实现任意行数的杨辉三角
  6. matlabapp窗口图像_matlab – 如何自定义App Designer图形的背景?
  7. Fullpage参数说明
  8. NeurIPS 2021 Spotlight | PCAN: 高效时序建模, 提升多目标追踪与分割性能
  9. 微服务的真相(一)服务拆的太小,后面迭代忍不了
  10. php 时间和日期,php日期和时间的应用
  11. java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet...
  12. 如何借助OpenStack命令行工具管理虚拟机?
  13. LVS-DR+Ldirectord+FreeNas实现负载均衡群集
  14. win7 管理iphone日历_iPhone和Windows同步文件,这7个技巧让你的效率成倍增加
  15. DeepCross Network(DCN)
  16. Revit相关问题:符号线,转转问题,生成三维视图
  17. WindowServer2012R2+Anoconda3.5.0.1+CUDA9.0+cuDNN7.1.3+Tensorflow-gpu1.6离线搭建深度学习开发环境
  18. 47 《清单革命》 -豆瓣评分7.0
  19. 【LaTex】3.2 数据结构(TikZ)
  20. 如何把PDF转成PPT文件?这几招简单方便

热门文章

  1. 360 n5 com.android.sc,360N5官方稳定版刷机包(最新系统刷机固件升级包V3.0稳定版)...
  2. 小白功能测试项目实战篇01-dtsshop开源商城项目之【会员管理】模块测试点分析
  3. 【读书笔记】名创优品的101个新零售细节-张桓.杨永朋,品质和供应链是核心竞争力
  4. 郎文词根mdx_欧陆词典导入mdx_欧路词典导入音频
  5. 物理用不用计算机,计算物理学到底是干什么的?
  6. python编辑视频教程_Maya中Python编辑基础核心技术训练视频教程
  7. PDF软件有这么好用的打印机,你知道吗?
  8. Adobe Acrobat 9 Pro打印提示“你需要先安装打印机方可执行打印相关任务,例如页面设置和打印文档。”解决
  9. 关于hibernate的mappedBy的使用:
  10. JavaScript 动态生成表格 及删除表格