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种精度取舍方式相关推荐

  1. java 向上舍入_介绍Java的大数类(BigDecimal)和八种舍入模式

    1.BigDecimal简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成.如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以 1 ...

  2. 一种新兴计数方式-视觉计数

    我们在工业生产过程中,经常会有用到计数的要求,尤其是小的产品,人工点数效率低下,而且很容易出错,工人在点数过程中容易产生视觉疲劳,多点或漏点的情况时常出现.普通的产品我们可以用称重的方式解决,但是称重 ...

  3. 通读《C++ primer plus》— C++中的5种数据类型转换方式

    通读<C++ primer plus>-记录一 C++中的5种数据类型转换方式 1.始化和赋值时转换 比如 int a=1; long b=2147483647; a=b; 上面的代码并不 ...

  4. 集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)

    LED五种调光方式详解 LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相 ...

  5. LED常见5种调光方式比较

    1.常见调光方式 1.前切相,可控硅调光 2.后切相MOS管调光 3.0/1-10V调光 4.DALI(数字可寻址照明接口) 5.DMX512(或DMX)调光 2.调光原理 1.前切向调光 采用可控硅 ...

  6. Pytorch两种模型保存方式

    以字典方式保存,更容易解析和可视化 Pytorch两种模型保存方式 大黑_7e1b关注 2019.02.12 17:49:35字数 13阅读 5,907 只保存模型参数 # 保存 torch.save ...

  7. Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用)

    Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用) 概述 传统的多进程间通信往往非常麻烦,采用的方法比如管道,共享内存,socket,文件等,大都非常繁琐, 1 ...

  8. MyBatis 三种批量插入方式的比较,我推荐第3个!

    欢迎关注方志朋的博客,回复"666"获面试宝典 数据库使用的是SQLServer,JDK版本1.8,运行在SpringBoot环境下 对比3种可用的方式 反复执行单条插入语句 xm ...

  9. Spring Boot 五种热部署方式,极速开发就是生产力!

    欢迎关注方志朋的博客,回复"666"获面试宝典 模板热部署 在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的, ...

最新文章

  1. Android studio中出现Couldn't resolve resource @dimen/...
  2. 手机怎样投屏到电脑_手机有线投屏到Windows电脑
  3. .NET(C#)有哪些主流的ORM框架,FreeSql,SqlSugar,Dapper,EF还是...
  4. 项目分析_xxoo-master
  5. 组件通信 $ref
  6. redis 底层数据结构 压缩列表 ziplist
  7. shell命令总结3
  8. 执行git命令时提示秘钥权限太开放‘Permissions 0644 for ‘/Users/liuml/.ssh/id_rsa_tz‘ are too open.’
  9. PHP mysql数据迁移,如何自动化PHP/MySQL应用程序的迁移(架构和数据)
  10. c 结构体中的变长数组
  11. 如何通过网页方式将jar包上传到nexus?
  12. 工作流框架的设计要点
  13. 桌面无计算机 win10,win10雨木林风系统桌面无计算机图片的处理办法
  14. 异常解决——Failed to introspect Class [com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration]
  15. CPU 到底是怎么识别代码的?
  16. iOS 支付 [支付宝 银联 微信]
  17. opencv报错:(depth == CV_8U || depth == CV_32F)
  18. 接口测试(一)--soapui实践
  19. PS制作三原色叠加效果教程
  20. 最新发布 Debian 系统的详细安装过程

热门文章

  1. mysql select语句执行顺序
  2. 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
  3. HTML-列表、表格、表单
  4. L2-4 哲哲打游戏 (25 分)
  5. 求整数的位数及各位数字之和 (15 分)
  6. mysql数据库源码安装_学习笔记-源码安装mariadb 20210128
  7. 内网发现,域名解析 mDNS(Arduino实现)
  8. IDEA java出现无效的源发行版 9
  9. PTA c语言 统计一行文本的单词个数
  10. 计算机四级数据库真题,2015年计算机四级数据库真题