BigDecimal舍入模式(Rounding Modes)

  • 1、ROUND_UP(向上舍入)
  • 2、ROUND_DOWN(向下舍入)
  • 3、ROUND_CEILING(以数轴向右舍入)
  • 4、ROUND_FLOOR(以数轴向左舍入)
  • 5、ROUND_HALF_UP(四舍五入)
  • 6、ROUND_HALF_DOWN(五舍六入)
  • 7、ROUND_HALF_EVEN(靠近偶数舍入)
  • 8、ROUND_UNNECESSARY(断言)

1、ROUND_UP(向上舍入)

源码中的解释:

Rounding mode to round away from zero. Always increments the digit prior to a nonzero discarded fraction. Note that this rounding mode never decreases the magnitude of the calculated value.

翻译:

舍入模式从零舍入。总是对丢弃的非零分数前面的数字递增。注意,这种舍入模式不会降低计算值的大小。

// 5
System.out.println(new BigDecimal("4.1").setScale(0, BigDecimal.ROUND_UP));
// -5
System.out.println(new BigDecimal("-4.1").setScale(0, BigDecimal.ROUND_UP));

2、ROUND_DOWN(向下舍入)

源码中的解释:

Rounding mode to round towards zero. Never increments the digit prior to a discarded fraction (i.e., truncates). Note that this rounding mode never increases the magnitude of the calculated value.

翻译:

舍入模式向零舍入。永远不要对丢弃的分数前面的数字加1(即截断)。注意,这种舍入模式不会增加计算值的大小。

// 4
System.out.println(new BigDecimal("4.9").setScale(0, BigDecimal.ROUND_DOWN));
// -4
System.out.println(new BigDecimal("-4.9").setScale(0, BigDecimal.ROUND_DOWN));

3、ROUND_CEILING(以数轴向右舍入)

源码中的解释:

Rounding mode to round towards positive infinity. If the BigDecimal is positive, behaves as for ROUND_UP; if negative, behaves as for ROUND_DOWN. Note that this rounding mode never decreases the calculated value.

翻译:

四舍五入到正无穷大。如果BigDecimal为正数,则与ROUND_UP相同;如果为负数,则表现为ROUND_DOWN。注意,这种舍入模式不会降低计算值。

// 5
System.out.println(new BigDecimal("4.1").setScale(0, BigDecimal.ROUND_CEILING));
// -4
System.out.println(new BigDecimal("-4.9").setScale(0, BigDecimal.ROUND_CEILING));

这个模式我称其为以数轴向右舍入,如图:

4、ROUND_FLOOR(以数轴向左舍入)

向左舍入与向右舍入恰好相反

源码中的解释:

Rounding mode to round towards negative infinity. If the BigDecimal is positive, behave as for ROUND_DOWN; if negative, behave as for ROUND_UP. Note that this rounding mode never increases the calculated value.

翻译:

四舍五入到负无穷。如果BigDecimal为正数,则采用与ROUND_DOWN相同的方式;如果为负数,则表现为ROUND_UP。注意,这种舍入模式不会增加计算值。

// 4
System.out.println(new BigDecimal("4.9").setScale(0, BigDecimal.ROUND_FLOOR));
// -5
System.out.println(new BigDecimal("-4.1").setScale(0, BigDecimal.ROUND_FLOOR));

5、ROUND_HALF_UP(四舍五入)

源码中的解释:

Rounding mode to round towards “nearest neighbor” unless both neighbors are equidistant, in which case round up. Behaves as for ROUND_UP if the discarded fraction is ≥ 0.5; otherwise, behaves as for ROUND_DOWN. Note that this is the rounding mode that most of us were taught in grade school.

翻译:

四舍五入模式向“最近的邻居”舍入,除非两个邻居的距离相等,这种情况下取四舍五入。如果丢弃的分数≥0.5,则表现为ROUND_UP;否则,表现为ROUND_DOWN。请注意,这是我们大多数人在小学学到的舍入模式。

// 4
System.out.println(new BigDecimal("4.4").setScale(0, BigDecimal.ROUND_HALF_UP));
// 5
System.out.println(new BigDecimal("4.5").setScale(0, BigDecimal.ROUND_HALF_UP));
// -4
System.out.println(new BigDecimal("-4.4").setScale(0, BigDecimal.ROUND_HALF_UP));
// -5
System.out.println(new BigDecimal("-4.5").setScale(0, BigDecimal.ROUND_HALF_UP));

6、ROUND_HALF_DOWN(五舍六入)

源码中的解释:

Rounding mode to round towards “nearest neighbor” unless both neighbors are equidistant, in which case round down. Behaves as for ROUND_UP if the discarded fraction is > 0.5; otherwise, behaves as for ROUND_DOWN.

翻译:

四舍五入模式向“最近的邻居”舍入,除非两个邻居的距离相等,在这种情况下向下舍入。如果丢弃的分数是> 0.5,则表现为ROUND_UP;否则,表现为ROUND_DOWN。

// 4
System.out.println(new BigDecimal("4.5").setScale(0, BigDecimal.ROUND_HALF_DOWN));
// 5
System.out.println(new BigDecimal("4.6").setScale(0, BigDecimal.ROUND_HALF_DOWN));
// -4
System.out.println(new BigDecimal("-4.5").setScale(0, BigDecimal.ROUND_HALF_DOWN));
// -5
System.out.println(new BigDecimal("-4.6").setScale(0, BigDecimal.ROUND_HALF_DOWN));

7、ROUND_HALF_EVEN(靠近偶数舍入)

舍入左边第一位是奇数,则四舍五入;左边是偶数,则五舍六入

源码中的解释:

Rounding mode to round towards the “nearest neighbor” unless both neighbors are equidistant, in which case, round towards the even neighbor. Behaves as for ROUND_HALF_UP if the digit to the left of the discarded fraction is odd; behaves as for ROUND_HALF_DOWN if it’s even. Note that this is the rounding mode that minimizes cumulative error when applied repeatedly over a sequence of calculations.

翻译:

四舍五入模式向“最近的邻居”舍入,除非两个邻居的距离相等,在这种情况下,向偶数的邻居舍入。如果丢弃的分数左边的数字是奇数,则表现为ROUND_HALF_UP;如果它是偶数,则表现为ROUND_HALF_DOWN。请注意,当在一系列计算中重复应用时,这种舍入模式能最大限度地减少累积误差。

// 4
System.out.println(new BigDecimal("4.4").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// 4
System.out.println(new BigDecimal("4.5").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// 5
System.out.println(new BigDecimal("4.6").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// 5
System.out.println(new BigDecimal("5.4").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// 6
System.out.println(new BigDecimal("5.5").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// 6
System.out.println(new BigDecimal("5.6").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// -4
System.out.println(new BigDecimal("-4.4").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// -4
System.out.println(new BigDecimal("-4.5").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// -5
System.out.println(new BigDecimal("-4.6").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// -5
System.out.println(new BigDecimal("-5.4").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// -6
System.out.println(new BigDecimal("-5.5").setScale(0, BigDecimal.ROUND_HALF_EVEN));
// -6
System.out.println(new BigDecimal("-5.6").setScale(0, BigDecimal.ROUND_HALF_EVEN));

8、ROUND_UNNECESSARY(断言)

源码中的解释:

Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary. If this rounding mode is specified on an operation that yields an inexact result, an ArithmeticException is thrown.

翻译:

舍入模式断言所请求的操作具有精确的结果,因此不需要舍入。如果在产生不精确结果的操作上指定此舍入模式,则会抛出算术异常。

// 断言计算结果包含一位小数则正常输出5.6
System.out.println(new BigDecimal("5.6").setScale(1, BigDecimal.ROUND_UNNECESSARY));// 断言计算结果不包含小数则报错:java.lang.ArithmeticException: Rounding necessary
System.out.println(new BigDecimal("5.6").setScale(0, BigDecimal.ROUND_UNNECESSARY));

BigDecimal舍入模式(Rounding Modes)相关推荐

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

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

  2. BigDecimal的8种round舍入模式

    写段代码,用一个数字(正数或负数),依次使用8种不同的模式,看i参数 public static void demo(BigDecimal bigDecimal, int scale){System. ...

  3. BigDecimal 八种舍入模式介绍

    BigDecimal 八种舍入模式介绍 一.BigDecimal 简介 二.BigDecimal 的舍入模式 ROUND_UP ROUND_DOWN ROUND_CEILING ROUND_FLOOR ...

  4. java BigDecimal八种舍入模式

    一.BigDecimal介绍 java.math.BigDecimal 不可变的immutable.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scal ...

  5. java 舍_Java中BigDecimal的8种舍入模式

    java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位 ...

  6. java bigdecimal.round_down,java BigDecimal 的 setScale() 方法的 BigDecimal.ROUND_DOWN 舍入模式的BUG,坑...

    因为项目使用到 BigDecimal.ROUND_DOWN 接近零的舍入模式 ,没想到有一个 使用的坑. 下面来例子说明: String add = "67.80"; System ...

  7. 全网最全的BigDecimal的newScale(保留小数位)和roundingMode(舍入模式),详细介绍roundingMode(重点)

    一般我们要对一个BigDecimal的数字进行保留小数位和设置舍入模式的时候,都是这样使用的: 对于加.减.乘得到的数字,直接使用BigDecimal对象.setScale,就像这样: 或者除法,在做 ...

  8. 【汇编语言与计算机系统结构笔记03】浮点数的计算机表示,IEEE 754,舍入(rounding),C语言中的浮点数

    本次笔记内容: 04.浮点数的计算机表示 文章目录 IEEE的浮点数标准 IEEE的754标准 浮点数示例 计算机中浮点数二进制表示 浮点数的类型 规格化浮点数(Normalized) 规格化浮点数示 ...

  9. 由 BigDecimal 舍入算法引发的血案:ROUND_HALF_UP 与 ROUND_UP

    背景 项目里最近新增了一个 Excel 导入功能,要求:保存 Excel 展示出来的数据. 原格式如下: 你以为所见即所得吗?不不不,我们看到的数据实际上是 Excel 做了显示隐藏的功能,程序读出来 ...

最新文章

  1. (原創) 如何將編譯結果,統一放在一個目錄下? (SOC) (Quartus II)
  2. 非关系型数据库-NoSQL(Redis)
  3. JAVA---AWT 图形绘制
  4. 网易游戏2016实习生招聘笔试题目--推箱子
  5. 深入理解Java虚拟机(类加载机制)
  6. 转:PHP应用性能优化指南
  7. go 简单的RPC服务与客户端通讯
  8. 那些年干过的事(六)—无源码修改版本号
  9. Spark源码分析之Spark Shell(下)
  10. Egret入门学习日记 --- 第十七篇(书中 7.4~8.2节 内容)
  11. [转]前端HTML书写不得不掌握的Emmet缩写语法
  12. ios免越狱脚本实现方案
  13. 泰晤士计算机专业排行,泰晤士2021世界大学学科排名:世界大学计算机学科排名...
  14. 干货!推荐系统中的异构关系学习
  15. 电脑桌面有计算机和回收站怎么办,电脑回收站不见了怎么办 电脑回收站找回的4种方法...
  16. 2022全国水下机器人大赛国际线上赛来啦!“水下感知赛、通信赛”等你来战!
  17. 计算机课app开发,毕业设计(论文)-基于Android的《计算机网络基础》课程App的设计与开发.doc...
  18. 【信息检索】Java简易搜索引擎原理及实现(三)B+树索引和轮排索引结构
  19. 基于 Self-hosted Debug 的调试
  20. java报错The method get_discount() is undefined for the type该如何处理?

热门文章

  1. win7 凭据管理无法保存
  2. 智慧停车服务器及存储系统设计,浅谈:停车场管理系统系统组成
  3. Python数据分析:柱形图的绘制方法
  4. 国内机器视觉发展如何实现逆风翻盘?
  5. PHP+AJAX开发幸运大转盘抽奖
  6. 计算机滴滴响重启,电脑发出滴滴声是什么原因(常见的4个故障和解决方法)...
  7. 藏锐 计算机硕士,指导项目一_认识计算机系统课件
  8. LAMP源码环境搭建
  9. JS下载不带后缀名的文件,下载后自动加了后缀名,如何处理?
  10. 使用Java-Hanlp训练CRF模型