BigDecimal 方法使用
时间:2021-08-25
本文章向大家介绍BigDecimal 方法使用,主要包括BigDecimal 方法使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 创建
/** * 1 创建 */ //new 对象 BigDecimal a = new BigDecimal("3"); // 内部静态 BigDecimal b = BigDecimal.valueOf(23L); BigDecimal c = BigDecimal.ONE; BigDecimal d = BigDecimal.TEN; BigDecimal e = BigDecimal.ZERO;
2 加减乘除
/** * 1 创建 */ //new 对象 BigDecimal a = new BigDecimal("3"); // 内部静态 BigDecimal b = BigDecimal.valueOf(23L); BigDecimal c = BigDecimal.ONE; BigDecimal d = BigDecimal.TEN; BigDecimal e = BigDecimal.ZERO; /** * 2 加减乘除 精度(除不尽情况报异常) 一般配合 scale方法+舎入方法 */ //加法 去2位小数 BigDecimal add = b.add(a).setScale(2, BigDecimal.ROUND_HALF_UP); // 减法 取1位小数 BigDecimal subtract = b.subtract(a).setScale(1, BigDecimal.ROUND_HALF_DOWN); // 乘法 取3位小数 BigDecimal multiplyA = b.multiply(a).setScale(3, BigDecimal.ROUND_FLOOR); // 除法 取两位小数 divideA 写法是错误的 先➗ 除不尽就已经报异常了 //BigDecimal divideA = b.divide(a).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal divideB = b.divide(a, 2, BigDecimal.ROUND_HALF_UP);
3 舎入模式
3.1 ROUND_UP 向上取整
3.2 ROUND_DOWN 向下取整
3.3 ROUND_HALF_UP 四舍五入
3.4ROUND_HALF_DOWN 五舍六入
3.5 ROUND_FLOOR 负无穷
3.6 ROUND_CEILING 正无穷
3.7 ROUND_HALF_EVEN 银行家舎入法
3.8 ROUND_UNNECESSARY 不需要舎入
4 组合使用
这里灵活多变,自己运用得当。
摘:测试代码
public static void main(String[] args) { /** * 1 创建 */ //new 对象 BigDecimal a = new BigDecimal("3"); // 内部静态 BigDecimal b = BigDecimal.valueOf(23L); BigDecimal c = BigDecimal.ONE; BigDecimal d = BigDecimal.TEN; BigDecimal e = BigDecimal.ZERO; /** * 2 加减乘除 精度(除不尽情况报异常) 一般配合 scale方法+舎入方法 */ //加法 去2位小数 BigDecimal add = b.add(a).setScale(2, BigDecimal.ROUND_HALF_UP); // 减法 取1位小数 BigDecimal subtract = b.subtract(a).setScale(1, BigDecimal.ROUND_HALF_DOWN); // 乘法 取3位小数 BigDecimal multiplyA = b.multiply(a).setScale(3, BigDecimal.ROUND_FLOOR); // 除法 取两位小数 divideA 写法是错误的 先➗ 除不尽就已经报异常了 //BigDecimal divideA = b.divide(a).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal divideB = b.divide(a, 2, BigDecimal.ROUND_HALF_UP); /** * RoundingMode 舍入模式 8种 小数取舍测试 */ BigDecimal f = BigDecimal.valueOf(10); BigDecimal g = BigDecimal.valueOf(3); //小数位向上取整 3.333 -> 3.34 BigDecimal divide1 = f.divide(g, 2, BigDecimal.ROUND_UP); //小数向下取整 3.333 -> 3.33 BigDecimal divide2 = f.divide(g, 2, BigDecimal.ROUND_DOWN); //小数 四舍五入 3.333 -> 3.33 BigDecimal divide3 = f.divide(g, 2, BigDecimal.ROUND_HALF_UP); /** * 小数 五舍六入 * 0.5 ->0 divide4=0 * 0.555 ->0.5 divide5=0.5 */ BigDecimal k = BigDecimal.valueOf(0.5); BigDecimal m = BigDecimal.valueOf(0.555); BigDecimal l = BigDecimal.valueOf(1); BigDecimal divide4 = k.divide(l, 0, BigDecimal.ROUND_HALF_DOWN); BigDecimal divide5 = m.divide(l, 2, BigDecimal.ROUND_HALF_DOWN); BigDecimal n = BigDecimal.valueOf(0.555); BigDecimal o = BigDecimal.valueOf(1); BigDecimal j = BigDecimal.valueOf(-0.555); /** * 正数 数字部分-向下取整 ROUND_UP 0.555 -> 0.55 divide6=0.55 * 负数 数字部分-向上取整 ROUND_DOWN -0.555 -> -0.56 divide7=-0.56 * 不管怎么取 最后的数往小的取 负无穷模式 */ BigDecimal divide6 = n.divide(o, 2, BigDecimal.ROUND_FLOOR); BigDecimal divide7 = j.divide(o, 2, BigDecimal.ROUND_FLOOR); /** *正数 数字部分-向上取整 ROUND_UP 0.555 -> 0.56 divide6=0.56 *负数 数字部分-向下取整 ROUND_DOWN -0.555 -> -0.55 divide7=-0.55 * 不管怎么取 最后的数往大的取 正无穷模式 */ BigDecimal divide8 = n.divide(o, 2, BigDecimal.ROUND_CEILING); BigDecimal divide9 = j.divide(o, 2, BigDecimal.ROUND_CEILING); /** * 银行家舎入法 * 这里取两位小数 * *小数第二位是奇数 四舍五入 ROUND_HALF_UP (四舍) 0.554 -> 0.55 divide11 =0.55 *小数第二位是奇数 四舍五入 ROUND_HALF_UP (五入) 0.555 -> 0.56 divide10 =0.56 * * 小数第二位是偶数 五舍六入 ROUND_HALF_DOWN (五舍) 0.565 -> 0.56 divide12 =0.56 * 小数第二位是偶数 五舍六入 ROUND_HALF_DOWN (六入)0.566 -> 0.57 divide13 =0.57 */ BigDecimal x = BigDecimal.valueOf(0.555); BigDecimal r = BigDecimal.valueOf(0.554); BigDecimal z = BigDecimal.valueOf(0.565); BigDecimal s = BigDecimal.valueOf(0.566); BigDecimal y = BigDecimal.valueOf(1); BigDecimal divide10 = x.divide(y, 2, BigDecimal.ROUND_HALF_EVEN); BigDecimal divide11 = r.divide(y, 2, BigDecimal.ROUND_HALF_EVEN); BigDecimal divide12 = z.divide(y, 2, BigDecimal.ROUND_HALF_EVEN); BigDecimal divide13 = s.divide(y, 2, BigDecimal.ROUND_HALF_EVEN); /** *精确值 不需要舎入 有精度会报错 divide14 会报错 */ //BigDecimal divide14 = s.divide(y, 2, BigDecimal.ROUND_UNNECESSARY); BigDecimal divide14 = s.divide(y,BigDecimal.ROUND_UNNECESSARY); /** * 组合使用 * 例如:(a*b)/(10-c) + d */ BigDecimal add1 = a.multiply(b).divide(BigDecimal.TEN.subtract(c), 2, BigDecimal.ROUND_UP).add(d); System.out.println(add1); }
原文地址:https://www.cnblogs.com/zq1003/p/15184513.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ubuntu 16安装asp.net
- MYSQL Rewriter plugin 我那什么拯救你,垃圾系统
- 不使用华为om工具如何手工部署openGauss主从流复制环境
- 比较两个等长的字符串,若相同,则输出Match!,若不同,则输出No Match!
- 逻辑回归算法原理及实现
- Python链表详细笔记
- 26个你需要学习的Firefox配置技巧,改进体验和加快浏览器响应速度
- Softmax算法原理及实现
- Android Activity 活动的生命周期
- Android学习笔记,不断更新
- cJSON,c语言的JSON库!
- 自己动手实现4大免费聊天机器人:小冰、图灵、腾讯、青云客
- Android Spinner下拉框的基本使用
- hadoop本地运行的两个案例。官方Grep案例、官方WordCount案例。
- 腾讯智能闲聊机器人详细开发教程