BigDecimal的8种精度取舍方式
package cn.xbz;import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class XBigDecimalDemo {/** 默认的数据精度 , 采用比较常用的2位 */private static final int DEF_SCALE = 2;/** 正数样本 */private static final List<BigDecimal> BIG_DECIMAL_STREAM = Arrays.asList(new BigDecimal("1.230"),new BigDecimal("1.231"),new BigDecimal("1.234"),new BigDecimal("1.235"),new BigDecimal("1.236"),new BigDecimal("1.239"));/** 负数样本 */private static final List<BigDecimal> _BIG_DECIMAL_STREAM = BIG_DECIMAL_STREAM.stream().map(BigDecimal.ZERO::subtract).collect(Collectors.toList());public static void main(String[] args) throws Exception {
// ROUND_CEILING();//向上进位
// ROUND_FLOOR();//向下舍位// ROUND_HALF_UP();//四舍五入
// ROUND_HALF_DOWN();//五舍六入// ROUND_UP();//绝对值向上进位
// ROUND_DOWN();//绝对值向下舍位ROUND_HALF_EVEN();//银行家算法 四舍六入 五看前数 奇进偶舍
// ROUND_UNNECESSARY();//不舍位 , 精度位数小于小数位数会抛出异常}/*** BigDecimal.ROUND_CEILING 向上进位 .* 若当前精度位后一位数字不为0 , 则向上进位* 数字更大*/private static void ROUND_CEILING() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > ROUND_CEILING > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_CEILING)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > ROUND_CEILING > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_CEILING)));}/*** BigDecimal.ROUND_FLOOR 向下舍位 .* 若当前精度位后一位数字不为0 , 则向下舍位* 数字更小*/private static void ROUND_FLOOR() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > ROUND_FLOOR > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_FLOOR)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > ROUND_FLOOR > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_FLOOR)));}/*** BigDecimal.ROUND_HALF_UP , 4舍5入 .* 正数4舍5进 , 负数4舍5退(-1.234 -> -1.23 ; -1.235 -> -1.24)*/public static void ROUND_HALF_UP() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > ROUND_HALF_UP > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_HALF_UP)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > ROUND_HALF_UP > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_HALF_UP)));}/*** BigDecimal.ROUND_HALF_DOWN , 5舍6入* 正数5舍6进 , 负数5舍6退(-1.235 -> -1.23 ; -1.236 -> -1.24)*/public static void ROUND_HALF_DOWN() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > ROUND_HALF_DOWN > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_HALF_DOWN)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > ROUND_HALF_DOWN > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_HALF_DOWN)));}/*** BigDecimal.ROUND_HALF_EVEN , 银行家算法 . 4舍6入 , 5看前数 , 奇进偶舍* 正数4舍6进 , 5看前一位数字 , 若为奇数则进位 , 若为偶数则舍位* 负数5舍6退(-1.235 -> -1.23 ; -1.236 -> -1.24)*/public static void ROUND_HALF_EVEN() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > ROUND_HALF_EVEN > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_HALF_EVEN)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > ROUND_HALF_EVEN > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_HALF_EVEN)));System.out.println();BigDecimal bd = new BigDecimal("0.01");BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal.add(bd) + " > ROUND_HALF_EVEN > " + bigDecimal.add(bd).setScale(DEF_SCALE, BigDecimal.ROUND_HALF_EVEN)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal.add(bd) + " > ROUND_HALF_EVEN > " + bigDecimal.add(bd).setScale(DEF_SCALE, BigDecimal.ROUND_HALF_EVEN)));}/*** BigDecimal.ROUND_UP , 绝对值向上进位 .* 若当前精度位后一位数字不为0 , 则绝对值向上进位* 正数更大 , 负数更小*/public static void ROUND_UP() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > ROUND_UP > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_UP)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > ROUND_UP > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_UP)));}/*** BigDecimal.ROUND_DOWN , 绝对值向下舍位 .* 若当前精度位后一位数字不为0 , 则绝对值向下舍位* 正数更小 , 负数更大*/public static void ROUND_DOWN() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > ROUND_DOWN > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_DOWN)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > ROUND_DOWN > " + bigDecimal.setScale(DEF_SCALE, BigDecimal.ROUND_DOWN)));}/*** BigDecimal.ROUND_UNNECESSARY , 不舍位 . 精度位数小于小数位数会抛出异常*/public static void ROUND_UNNECESSARY() {BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(" " + bigDecimal + " > UNNECESSARY > " + bigDecimal.setScale(3, BigDecimal.ROUND_UNNECESSARY)));System.out.println();_BIG_DECIMAL_STREAM.forEach(bigDecimal -> System.out.println(bigDecimal + " > UNNECESSARY > " + bigDecimal.setScale(3, BigDecimal.ROUND_UNNECESSARY)));}
}
BigDecimal的8种精度取舍方式相关推荐
- java 向上舍入_介绍Java的大数类(BigDecimal)和八种舍入模式
1.BigDecimal简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成.如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以 1 ...
- 一种新兴计数方式-视觉计数
我们在工业生产过程中,经常会有用到计数的要求,尤其是小的产品,人工点数效率低下,而且很容易出错,工人在点数过程中容易产生视觉疲劳,多点或漏点的情况时常出现.普通的产品我们可以用称重的方式解决,但是称重 ...
- 通读《C++ primer plus》— C++中的5种数据类型转换方式
通读<C++ primer plus>-记录一 C++中的5种数据类型转换方式 1.始化和赋值时转换 比如 int a=1; long b=2147483647; a=b; 上面的代码并不 ...
- 集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)
LED五种调光方式详解 LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相 ...
- LED常见5种调光方式比较
1.常见调光方式 1.前切相,可控硅调光 2.后切相MOS管调光 3.0/1-10V调光 4.DALI(数字可寻址照明接口) 5.DMX512(或DMX)调光 2.调光原理 1.前切向调光 采用可控硅 ...
- Pytorch两种模型保存方式
以字典方式保存,更容易解析和可视化 Pytorch两种模型保存方式 大黑_7e1b关注 2019.02.12 17:49:35字数 13阅读 5,907 只保存模型参数 # 保存 torch.save ...
- Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用)
Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用) 概述 传统的多进程间通信往往非常麻烦,采用的方法比如管道,共享内存,socket,文件等,大都非常繁琐, 1 ...
- MyBatis 三种批量插入方式的比较,我推荐第3个!
欢迎关注方志朋的博客,回复"666"获面试宝典 数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式 反复执行单条插入语句 xm ...
- Spring Boot 五种热部署方式,极速开发就是生产力!
欢迎关注方志朋的博客,回复"666"获面试宝典 模板热部署 在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的, ...
最新文章
- Android studio中出现Couldn't resolve resource @dimen/...
- 手机怎样投屏到电脑_手机有线投屏到Windows电脑
- .NET(C#)有哪些主流的ORM框架,FreeSql,SqlSugar,Dapper,EF还是...
- 项目分析_xxoo-master
- 组件通信 $ref
- redis 底层数据结构 压缩列表 ziplist
- shell命令总结3
- 执行git命令时提示秘钥权限太开放‘Permissions 0644 for ‘/Users/liuml/.ssh/id_rsa_tz‘ are too open.’
- PHP mysql数据迁移,如何自动化PHP/MySQL应用程序的迁移(架构和数据)
- c 结构体中的变长数组
- 如何通过网页方式将jar包上传到nexus?
- 工作流框架的设计要点
- 桌面无计算机 win10,win10雨木林风系统桌面无计算机图片的处理办法
- 异常解决——Failed to introspect Class [com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration]
- CPU 到底是怎么识别代码的?
- iOS 支付 [支付宝 银联 微信]
- opencv报错:(depth == CV_8U || depth == CV_32F)
- 接口测试(一)--soapui实践
- PS制作三原色叠加效果教程
- 最新发布 Debian 系统的详细安装过程