Java中的RoundingMode舍入模式詳解
RoundingMode 是 Java 中用于控制舍入行為的枚舉類,位于 java.math 包中。它常與 BigDecimal、DecimalFormat 等高精度數(shù)值處理類一起使用,以明確指定在精度不足或需要截?cái)鄷r(shí)應(yīng)如何舍入。
一、RoundingMode 枚舉值(共 8 種)
| 枚舉常量 | 說明 | 對(duì)應(yīng)的舍入規(guī)則(以正數(shù)為例) |
|---|---|---|
UP | 遠(yuǎn)離零方向舍入 | 1.1 → 2,1.9 → 2,-1.1 → -2 |
DOWN | 向零方向舍入(截?cái)啵?/td> | 1.9 → 1,-1.9 → -1 |
CEILING | 向正無窮方向舍入 | 正數(shù)同 UP,負(fù)數(shù)同 DOWN |
FLOOR | 向負(fù)無窮方向舍入 | 正數(shù)同 DOWN,負(fù)數(shù)同 UP |
HALF_UP | 四舍五入(最常用) | 1.5 → 2,1.4 → 1,-1.5 → -2 |
HALF_DOWN | 五舍六入 | 1.5 → 1,1.6 → 2,-1.5 → -1 |
HALF_EVEN | 銀行家舍入法(四舍六入五成雙) | 1.5 → 2,2.5 → 2,3.5 → 4(使結(jié)果為偶數(shù)) |
UNNECESSARY | 不需要舍入,若需舍入則拋出 ArithmeticException | 僅用于精確計(jì)算,如 1.00 保留兩位小數(shù)沒問題,但 1.01 保留一位會(huì)報(bào)錯(cuò) |
?? 注意:
HALF_UP是我們?nèi)粘Uf的“四舍五入”,而HALF_EVEN是 IEEE 754 推薦的標(biāo)準(zhǔn)舍入方式,可減少累積誤差。
二、示例
import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundingModeTest {
public static void main(String[] args) {
BigDecimal value = new BigDecimal("2.555");
// RoundingMode.UP 指定位向上取整
System.out.println("RoundingMode.UP 指定位向上取整");
System.out.println(value.setScale(0,RoundingMode.UP));
System.out.println(value.setScale(1,RoundingMode.UP));
// RoundingMode.UP 指定位向下取整
System.out.println("RoundingMode.DOWN 指定位向下取整");
System.out.println(value.setScale(0,RoundingMode.DOWN));
System.out.println(value.setScale(1,RoundingMode.DOWN));
// RoundingMode.CEILING 指定位向最近整數(shù)取整,如果距離兩邊一樣遠(yuǎn),則向上取整
System.out.println("RoundingMode.CEILING 指定位向最近整數(shù)取整,如果距離兩邊一樣遠(yuǎn),則向上取整");
System.out.println(value.setScale(0,RoundingMode.CEILING));
System.out.println(value.setScale(1,RoundingMode.CEILING));
System.out.println(value.setScale(2,RoundingMode.CEILING));
// RoundingMode.FLOOR 指定位向最近整數(shù)取整,如果距離兩邊一樣遠(yuǎn),則向下取整
System.out.println("RoundingMode.FLOOR 指定位向最近整數(shù)取整,如果距離兩邊一樣遠(yuǎn),則向下取整");
System.out.println(value.setScale(0,RoundingMode.FLOOR));
System.out.println(value.setScale(1,RoundingMode.FLOOR));
System.out.println(value.setScale(2,RoundingMode.FLOOR));
// RoundingMode.HALF_UP 四舍五入
System.out.println("RoundingMode.HALF_UP 四舍五入");
System.out.println(value.setScale(0,RoundingMode.HALF_UP));
System.out.println(value.setScale(1,RoundingMode.HALF_UP));
System.out.println(value.setScale(2,RoundingMode.HALF_UP));
// RoundingMode.HALF_DOWN 五舍六入
System.out.println("RoundingMode.HALF_DOWN 五舍六入");
System.out.println(value.setScale(0,RoundingMode.HALF_DOWN));
System.out.println(value.setScale(1,RoundingMode.HALF_DOWN));
System.out.println(value.setScale(2,RoundingMode.HALF_DOWN));
// RoundingMode.HALF_EVEN 銀行家舍入,四舍六入,五成雙,看前一位
System.out.println("RoundingMode.HALF_EVEN 銀行家舍入,四舍六入,五成雙,看前一位");
System.out.println(value.setScale(0,RoundingMode.HALF_EVEN));
System.out.println(value.setScale(1,RoundingMode.HALF_EVEN));
System.out.println(value.setScale(2,RoundingMode.HALF_EVEN));
// RoundingMode.UNNECESSARY 不進(jìn)行舍入,如果舍入位不為0,則拋出ArithmeticException異常
System.out.println("RoundingMode.UNNECESSARY 不進(jìn)行舍入,如果舍入位不為0,則拋出ArithmeticException異常");
}
}RoundingMode.UP 指定位向上取整 3 2.6 RoundingMode.DOWN 指定位向下取整 2 2.5 RoundingMode.CEILING 指定位向最近整數(shù)取整,如果距離兩邊一樣遠(yuǎn),則向上取整 3 2.6 2.56 RoundingMode.FLOOR 指定位向最近整數(shù)取整,如果距離兩邊一樣遠(yuǎn),則向下取整 2 2.5 2.55 RoundingMode.HALF_UP 四舍五入 3 2.6 2.56 RoundingMode.HALF_DOWN 五舍六入 3 2.6 2.55 RoundingMode.HALF_EVEN 銀行家舍入,四舍六入,五成雙,看前一位 3 2.6 2.56 RoundingMode.UNNECESSARY 不進(jìn)行舍入,如果舍入位不為0,則拋出ArithmeticException異常
到此這篇關(guān)于Java中的RoundingMode舍入模式詳解的文章就介紹到這了,更多相關(guān)java roundingmode舍入模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring線程池ThreadPoolTaskExecutor的用法及說明
這篇文章主要介紹了Spring線程池ThreadPoolTaskExecutor的用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
記一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請(qǐng)求異常的解決辦法
Knife4j是一個(gè)集Swagger2 和 OpenAPI3為一體的增強(qiáng)解決方案,下面這篇文章主要給大家介紹了關(guān)于一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請(qǐng)求異常的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
詳解SpringBoot 添加對(duì)JSP的支持(附常見坑點(diǎn))
這篇文章主要介紹了詳解SpringBoot 添加對(duì)JSP的支持(附常見坑點(diǎn)),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10
Java基礎(chǔ)之MapReduce框架總結(jié)與擴(kuò)展知識(shí)點(diǎn)
本章,是MapReduce的最終章,我在寫本章的時(shí)候,發(fā)現(xiàn)前面忘記介紹MpaTask與ReduceTask了,所以本章補(bǔ)上哈,另外還有兩個(gè)擴(kuò)展的知識(shí)點(diǎn),講完這些,我會(huì)對(duì)整個(gè)MapReduce進(jìn)行總結(jié)一下,讓大家再次了解MapReduce的工作流程,更加清晰地認(rèn)識(shí)MapReduce ,需要的朋友可以參考下2021-05-05

