BigDecimal的四则运算及小数位数格式

一、加法

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

二、减法

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

 三、乘法

1BigDecimal b1 = new BigDecimal("2"); 2BigDecimal b2 = new BigDecimal("3"); 3BigDecimal multiply = b1.multiply(b2); 4System.out.println(multiply); 5打印结果: 66 7 8BigDecimal b1 = new BigDecimal("2.30"); 9BigDecimal b2 = new BigDecimal("3.0"); 10BigDecimal multiply = b1.multiply(b2); 11System.out.println(multiply); 12 13打印结果: 146.900 15说明: 16小数相乘,不加限制的情况下,计算的结果小数点的保有量是两积数小数点位数之和

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

1总体说明:b1为被除数,b2为除数BigDecimal b1 = new BigDecimal("30"); 2BigDecimal b2 = new BigDecimal("3"); 3BigDecimal divide = b2.divide(b1); 4System.out.println(divide);打印结果:0.1说明:只能运算可以除尽的运算。 5 6BigDecimal 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:这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入

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

1BigDecimal bigDecimal = new BigDecimal("2.35645"); 2System.out.println("原始的" + bigDecimal); 3BigDecimal bigDecimal1 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP); 4System.out.println("格式化后" + bigDecimal1);打印结果: 原始的2.35645 格式化后2.36setScale()方法参数介绍: 第一个参数:小数点后保留的位数 第二个参数:舍入模式舍入模式列举: 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)接近负无穷大的舍入,数字>0ROUND_UP作用一样,数字<0ROUND_DOWN作用一样 setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )