加法:add()函数

减法:subtract()函数

乘法:multipy()函数

除法:divide()函数

首先进行初始化

这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示

BigDecimal num1 = new BigDecimal(0.005);
BigDecimal num2 = new BigDecimal(1000000);
BigDecimal num3 = new BigDecimal(-1000000);
//尽量用字符串的形式初始化
BigDecimal num12 = new BigDecimal("0.005");
BigDecimal num22 = new BigDecimal("1000000");
BigDecimal num32 = new BigDecimal("-1000000");
//加法
BigDecimal result1 = num1.add(num2);
System.out.println("加法用value结果"+result1);
BigDecimal result12 = num12.add(num22);
System.out.println("加法用String结果"+result12);//减法
BigDecimal result2 = num1.subtract(num2);
System.out.println("减法用value结果"+result2);
BigDecimal result22 = num12.subtract(num22);
System.out.println("减法用String结果"+result22);//乘法
BigDecimal result3 = num1.multiply(num2);
System.out.println("乘法用value结果"+result3);
BigDecimal result32 = num12.multiply(num22);
System.out.println("乘法用String结果"+result32);//绝对值
BigDecimal result4 = num3.abs();
System.out.println("绝对值用value结果"+result4);
BigDecimal result42 = num32.abs();
System.out.println("绝对值用String结果"+result42);//除法
BigDecimal result5 = num2.divide(num1,20,BigDecimal.ROUND_HALF_UP);
System.out.println("除法用value结果"+result5);
BigDecimal result52 = num22.divide(num12,20,BigDecimal.ROUND_HALF_UP);
System.out.println("除法用String结果"+result52);

得到的结果:(用String初始化)

注:

1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。

2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!

因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。

3)除法divide()函数:使用除法函数divide()的时候,如果是除2、10或者100等可以除尽的时候,不需要精确的小数位数和舍入模式(也可以加),如果是除不尽的则必须加精确的小数位数和舍入模式,不然会报错。

divide(BigDecimal divisor 除数, int scale 精确小数位,  int roundingMode 舍入模式)

八种舍入模式解释如下

1、ROUND_UP

舍入远离零的舍入模式。

在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。

注意,此舍入模式始终不会减少计算值的大小。

2、ROUND_DOWN

接近零的舍入模式。

在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。

注意,此舍入模式始终不会增加计算值的大小。

3、ROUND_CEILING

接近正无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;

如果为负,则舍入行为与 ROUND_DOWN 相同。

注意,此舍入模式始终不会减少计算值。

4、ROUND_FLOOR

接近负无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;

如果为负,则舍入行为与 ROUND_UP 相同。

注意,此舍入模式始终不会增加计算值。

5、ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。

注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

6、ROUND_HALF_DOWN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。

7、ROUND_HALF_EVEN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;

如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。

如果前一位为奇数,则入位,否则舍去。

以下例子为保留小数点1位,那么这种舍入方式下的结果。

1.15>1.2 1.25>1.2

8、ROUND_UNNECESSARY

断言请求的操作具有精确的结果,因此不需要舍入。

如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

比较大小

BigDecimal a = new BigDecimal ("101");
BigDecimal b = new BigDecimal ("111");//使用compareTo方法比较
//注意:a、b均不能为null,否则会报空指针
if(a.compareTo(b) == -1){System.out.println("a小于b");
}if(a.compareTo(b) == 0){System.out.println("a等于b");
}if(a.compareTo(b) == 1){System.out.println("a大于b");
}if(a.compareTo(b) > -1){System.out.println("a大于等于b");
}if(a.compareTo(b) < 1){System.out.println("a小于等于b");
}

BigDecimal的加减乘除,以及四舍五入和比较大小相关推荐

  1. 记录---基于BigDecimal的特殊的四舍五入

    机试问题-实现基于BigDecimal的特殊的四舍五入. 这是一道外企的机试题,我把里面的某个难点部分,摘出来详细如下: //实现特殊的四舍五入,先普通四舍五入取到小数点后两位,然后最后一位向后进位, ...

  2. BigDecimal加减乘除次方运算及比较大小

    BigDecimal需要进行初始化,这里我对比两种初始化值的结果 BigDecimal big1 = new BigDecimal(0.05);BigDecimal big2 = new BigDec ...

  3. 小数(BigDecimal)加减乘除、比较大小

    java中: public static BigDecimal  math(BigDecimal b1,BigDecimal b2){ // 1.加法(b1加b2) BigDecimal  add = ...

  4. java工作笔记018---java中BigDecimal小数位数的四舍五入等操作

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个电视购物项目大量用到了BigDecimal,有钱内存大,哈哈 一.简介 Java在java.m ...

  5. 详解BigDecimal及其加减乘除运算

    目录 一.BigDecimal概述 二.构造函数详解 1.BigDecimal(int val) 2.BigDecimal(int val, MathContext mc) MathContext 3 ...

  6. bigdicmal除法精度设置_java中BigDecimal进行加减乘除的基本用法

    前言 众所周知Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或 ...

  7. 封装BigDecimal的加减乘除方法,保留自定义位小数的工具。

    首先效果展示: public static void main(String[] args) {String s1="2.560";String s2="0.525&qu ...

  8. BigDecimal的加减乘除

    加法 add()函数 减法subtract()函数 乘法multiply()函数 除法divide()函数 绝对值abs()函数

  9. Java中BigDecimal类型的加减乘除及大小比对

    Java中BigDecimal类型的加减乘除及大小比对 前言 BigDecimal解释 创建BigDecimal类型 加减乘除计算 结果分析 结论 除法的补充 两个BigDecimal的比对 前言 在 ...

最新文章

  1. Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
  2. redis 之 sds (二) char []
  3. Recommend索引
  4. 介绍一下python有趣的库-tqdm
  5. springboot web项目_Vue、Spring Boot开发小而完整的Web前后端分离项目实战12
  6. ImportError: No module named Cython.Build
  7. iOS开发-开发总结(四)
  8. 视图和表的区别和联系
  9. [Android] Bitmap OOM解决办法一
  10. evt参数是干啥用的_塑料凳子上的洞,是干啥用的?
  11. wpf checkbox选中触发事件_Web前端开发(16)——JQuery事件绑定与插件
  12. 20200119:(leetcode)回文数(3种解法)
  13. mui点击添加类名_Mui使用jquery并且使用点击跳转新窗口的实例
  14. 计算机中丢失pbvm80,修复pbvm80.dll
  15. 打开 .npy文件 并显示
  16. mysql 章节作业题
  17. 对于无人驾驶技术(驾驶自动化)L0-L5分级的说明
  18. 您的计算机无法启动磁盘损坏,解决办法:如何修复SATA硬盘损坏并无法启动?...
  19. 过滤树形结构数组的方法
  20. 编写程序数一下 1到 100 的所有整数中出现多少次数字9_C语言编写

热门文章

  1. 7-8 看电影 (10 分)
  2. 配置一台计算机声卡,电脑需要配置单独声卡吗,有是什么用
  3. 基于JAVA演唱会门票订售及管理系统计算机毕业设计源码+系统+lw文档+部署(2)
  4. Java基础系列五 面向对象程序设计
  5. Mysql关键字大全
  6. 闪送v4.1.7官方安卓版
  7. 基于FPGA的SATA Host速度协商和OOB实现
  8. 如何用Python把篮球和鸡联系起来
  9. java基础第十九篇之Xml
  10. 云上MongoDB常见索引问题及最优索引规则大全