一、加法

BigDecimal b1 = new BigDecimal("20");
BigDecimal b2 = new BigDecimal("30");
BigDecimal add = b1.add(b2);
System.out.println(add); 打印结果:
50

二、减法

BigDecimal b1 = new BigDecimal("53.22");
BigDecimal b2 = new BigDecimal("25.14");
BigDecimal subtract = b1.subtract(b2);
System.out.println(subtract); 打印结果:
28.08
说明:
b1是被减数,b2是减数,小的减大的得负数,不报错

三、乘法

BigDecimal b1 = new BigDecimal("2");
BigDecimal b2 = new BigDecimal("3");
BigDecimal multiply = b1.multiply(b2);
System.out.println(multiply);
打印结果:
6 BigDecimal b1 = new BigDecimal("2.30");
BigDecimal b2 = new BigDecimal("3.0");
BigDecimal multiply = b1.multiply(b2);
System.out.println(multiply); 打印结果:
6.900
说明:
小数相乘,不加限制的情况下,计算的结果小数点的保有量是两积数小数点位数之和

四、除法(分母不能为0)

总体说明:b1为被除数,b2为除数
BigDecimal b1 = new BigDecimal("30");
BigDecimal b2 = new BigDecimal("3");
BigDecimal divide = b2.divide(b1);
System.out.println(divide);
打印结果:
0.1
说明:只能运算可以除尽的运算。
BigDecimal b1 = new BigDecimal("10");
BigDecimal b2 = new BigDecimal("3");
BigDecimal divide = b1.divide(b2,3,RoundingMode.HALF_DOWN);
System.out.println(divide);
打印结果:
3.333
说明:第一个参数(b2):除数
第二个参数(3):小数点之后保留几位
第三个参数(RoundingMode.HALF_DOWN):舍入模式
舍入模式参数说明(加入数轴概念):

RoundingMode.CEILING:取右边最近的整数

RoundingMode.DOWN:去掉小数部分取整,也就是正数取左边,负数取右边,相当于向原点靠近的方向取整

RoundingMode.FLOOR:取左边最近的正数

RoundingMode.HALF_DOWN:五舍六入,负数先取绝对值再五舍六入再负数

RoundingMode.HALF_UP:四舍五入,负数原理同上

RoundingMode.HALF_EVEN:这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入

五、小数位数和取值的格式化

BigDecimal bigDecimal = new BigDecimal("2.35645");
System.out.println("原始的" + bigDecimal);
BigDecimal bigDecimal1 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("格式化后" + bigDecimal1); 打印结果:
原始的2.35645
格式化后2.36
setScale()方法参数介绍:
第一个参数:小数点后保留的位数
第二个参数:舍入模式
舍入模式列举:
setScale(1)表示保留一位小数,默认用四舍五入方式 这种模式可能会有问题,可能会报(java.lang.ArithmeticException: Rounding necessary),请测试后使用
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 数据取整可用(向下取整)
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 数据取整可用 (向上取整)
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)五舍六入,2.55变成2.5/2.551变成2.6,如果是5则向下舍
setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入
setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

BigDecimal的四则运算及小数位数格式的更多相关文章

  1. 问题记录——BigDecimal保留两位小数及格式化成百分比

    1.函数总结 BigDecimal.setScale()方法用于格式化小数点 setScale(1)表示保留一位小数,默认用四舍五入方式 setScale(1,BigDecimal.ROUND_DOW ...

  2. 在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数)

    //在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数) function formatNum(num ...

  3. double四舍五入,商品金额大小写转换,设置货币的小数位数跟格式输出,进制转化

      1:计算double值四舍五入的方法 对小数数值进行四舍五入,首先应该确认保留小数位, 如果数值的小数精度大于保留小数位,那么开始四舍五入计算.四舍五入的方法非常简单,在所有要丢失精度的小数位中加 ...

  4. Java学习-047-数值格式化及小数位数四舍五入

    此小工具类主要用于数值四舍五入.数值格式化输出,很简单,若想深入研究,敬请自行查阅 BigDecimal 或 DecimalFormat 的 API,BigDecimal.setScale(位数,四舍 ...

  5. C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现

      在C#中大家都会遇到这种情况 double类型的数据,需要格式化(保留N未有效数字)或者是保留N为小数等情况,我们往往采取double.tostring("参数");的方法.下 ...

  6. java如何获取一个double的小数位数

    前言 看标题是不是觉得这是一个很简单的问题,我一开始也是这么认为的,但是实际情况下,在各种情况下我们都进行了测试,发现很多实际情况是无法不尽如人意的. 方法分析 当前能想到的比较容易有下面几种 1.直 ...

  7. C#数字类型输出字符串时保留指定小数位数的方法

    1.使用占位符: 1)float f = 321.12345F;f.ToString("0.00");这样做无论f是不是整数,都将加上2位小数. 2)float f = 321.1 ...

  8. Java指定保留小数位数的方法

    package com.qiyuan.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.tex ...

  9. javascript小数相减出现一长串的小数位数

    我们要修改网页某个数据的显示格式,需要两步操作: 1.在JS中通过$('.class1 .class2 li:eq(2) span.value').text().trim();类似的语句获取到数据内容 ...

随机推荐

  1. shell脚本练习01

    ######################################################################### # File Name: 4.5.sh # Auth ...

  2. C# 反射的委托创建器

    原文:C# 反射的委托创建器 .Net 的反射是个很好很强大的东西,不过它的效率却实在是不给力.已经有很多人针对这个问题讨论过了,包括各种各样的 DynamicMethod 和各种各样的效率测试,不过 ...

  3. (十一)Json文件配置

    接上一节,新建一个项目:JsonConfigSample 依然添加Microsoft.AspNetCore.All 在项目下新建一个Class.json配置文件 { ", "Cla ...

  4. c语言排序代码实现

    关于快速,冒泡,选择,插入等排序,本人用代码实现,均能运行成功. 本文除了排序,针对几种swap函数,也进行了说明,通过汇编代码分析,swap1函数的效率最高. #include<iostrea ...

  5. 2018-2-13-安装visualStudio-出现-cant-install-Microsoft.TeamFoundation.OfficeIntegration.Resources...

    title author date CreateTime categories 安装visualStudio 出现 cant install Microsoft.TeamFoundation.Offi ...

  6. 编写main方法

  7. 记录一次工作中配置的Mysql主从复制过程

    Mysql主从复制教程 1.安装mysql(安装步骤跳过)2.配置密码.(如果忘记密码或者误操作删除了root用户,使用如下命令,没有忘记就跳到3)将skip-grant-tables放在/etc/m ...

  8. BZOJ1597: [Usaco2008 Mar]土地购买——斜率优化

    题目大意: 将$n$个长方形分成若干部分,每一部分的花费为部分中长方形的$max_长*max_宽$(不是$max_{长*宽}$),求最小花费 思路: 首先,可以被其他长方形包含的长方形可以删去 然后我 ...

  9. xcart小数点位数

    xcart小数点的位数默认是2位,有时候需要根据需要更改位数:一开始以为把数据库中的数据类型的位数更改过后,就能生效,结果发现xcart在程序中作了限制,只能是2位.那么只能通过更改程序的方式来更改了 ...

  10. 六. Default arguments 参数默认值

    示例: 注意点:函数是会默认声明参数变量的,所以不需要再重新声明一次,否则会报错 错误示例如下: 函数参数的传值方法: 需要注意的是:如果要给第二个参数传值,那第一个参数要传undefined,而不能 ...