<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 100  文章 - 50  trackbacks - 0
    <2017年2月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627281234
    567891011

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    我收藏的一些文章!

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    背景

    在對數值做一些計算的時候,往往我們需要控制計算結果的精度,所以會使用到DecimalFormat類來將數值格式化成字符串。在最近測試中,突然注意到默認使用DecimalFormat進行格式化時,并非我們一般認識上的四舍五入,而是一種詭異的舍入——(1)5以下舍去(2)5以上舍入(3)若前一位是奇數,5就舍入(4)如前一位是偶數,5就舍去

    遇到這樣的統計結論,沒有理論的支持,我們總是感到很迷茫,所以我仔細查閱了DecimalFormat相關API,終于找到了答案。

     

    分析

    在DecimalFormat API中有這樣一段:

    舍入

    DecimalFormat 提供 RoundingMode 中定義的舍入模式進行格式化。默認情況下,它使用RoundingMode.HALF_EVEN

    這句話指出了舍入模式有多種類型,而DecimalFormat默認采用了RoundingMode.HALF_EVEN這種類型,接下來,我們就一起看看,到底存在哪些舍入類型吧

     

    RoundingMode介紹

    RoundingMode是一個枚舉類,有一下幾個常量:UP,DOWN,CEILING,FLOOR,HALF_UP,HALF_DOWN,HALF_EVEN,UNNECESSARY

     


     

    UP
    public static final RoundingMode UP
    遠離零方向舍入的舍入模式。始終對非零舍棄部分前面的數字加 1。注意,此舍入模式始終不會減少計算值的絕對值。

    示例:

    輸入數字使用 UP 舍入模式
    將輸入數字舍入為一位數
    5.56
    2.53
    1.62
    1.12
    1.01
    -1.0-1
    -1.1-2
    -1.6-2
    -2.5-3
    -5.5-6

     


     

    DOWN
    public static final RoundingMode DOWN
    向零方向舍入的舍入模式。從不對舍棄部分前面的數字加 1(即截尾)。注意,此舍入模式始終不會增加計算值的絕對值。

    示例:

    輸入數字使用 DOWN 舍入模式
    將輸入數字舍入為一位數
    5.55
    2.52
    1.61
    1.11
    1.01
    -1.0-1
    -1.1-1
    -1.6-1
    -2.5-2
    -5.5-5

     


     

    CEILING
    public static final RoundingMode CEILING
    向正無限大方向舍入的舍入模式。如果結果為正,則舍入行為類似于 RoundingMode.UP;如果結果為負,則舍入行為類似于 RoundingMode.DOWN。注意,此舍入模式始終不會減少計算值。

    示例:

    輸入數字使用 CEILING 舍入模式
    將輸入數字舍入為一位數
    5.56
    2.53
    1.62
    1.12
    1.01
    -1.0-1
    -1.1-1
    -1.6-1
    -2.5-2
    -5.5-5

     


     

    FLOOR
    public static final RoundingMode FLOOR
    向負無限大方向舍入的舍入模式。如果結果為正,則舍入行為類似于 RoundingMode.DOWN;如果結果為負,則舍入行為類似于RoundingMode.UP。注意,此舍入模式始終不會增加計算值。

    示例:

    輸入數字使用 FLOOR 舍入模式
    將輸入數字舍入為一位數
    5.55
    2.52
    1.61
    1.11
    1.01
    -1.0-1
    -1.1-2
    -1.6-2
    -2.5-3
    -5.5-6

     


     

    HALF_UP
    public static final RoundingMode HALF_UP
    向最接近數字方向舍入的舍入模式,如果與兩個相鄰數字的距離相等,則向上舍入。如果被舍棄部分 >= 0.5,則舍入行為同 RoundingMode.UP;否則舍入行為同RoundingMode.DOWN。注意,此舍入模式就是通常學校里講的四舍五入。

    示例:

    輸入數字使用 HALF_UP 舍入模式
    將輸入數字舍入為一位數
    5.56
    2.53
    1.62
    1.11
    1.01
    -1.0-1
    -1.1-1
    -1.6-2
    -2.5-3
    -5.5-6

     


     

    HALF_DOWN
    public static final RoundingMode HALF_DOWN
    向最接近數字方向舍入的舍入模式,如果與兩個相鄰數字的距離相等,則向下舍入。如果被舍棄部分 > 0.5,則舍入行為同 RoundingMode.UP;否則舍入行為同RoundingMode.DOWN

    示例:

    輸入數字使用 HALF_DOWN 舍入模式
    將輸入數字舍入為一位數
    5.55
    2.52
    1.62
    1.11
    1.01
    -1.0-1
    -1.1-1
    -1.6-2
    -2.5-2
    -5.5-5

     


     

    HALF_EVEN
    public static final RoundingMode HALF_EVEN
    向最接近數字方向舍入的舍入模式,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。如果舍棄部分左邊的數字為奇數,則舍入行為同RoundingMode.HALF_UP;如果為偶數,則舍入行為同RoundingMode.HALF_DOWN。注意,在重復進行一系列計算時,此舍入模式可以在統計上將累加錯誤減到最小。此舍入模式也稱為“銀行家舍入法”,主要在美國使用。此舍入模式類似于 Java 中對float 和double 算法使用的舍入策略。

    示例:

    輸入數字使用 HALF_EVEN 舍入模式
    將輸入數字舍入為一位數
    5.56
    2.52
    1.62
    1.11
    1.01
    -1.0-1
    -1.1-1
    -1.6-2
    -2.5-2
    -5.5-6

     


     

    UNNECESSARY
    public static final RoundingMode UNNECESSARY
    用于斷言請求的操作具有精確結果的舍入模式,因此不需要舍入。如果對生成精確結果的操作指定此舍入模式,則拋出 ArithmeticException

    示例:

    輸入數字使用 UNNECESSARY 舍入模式
    將輸入數字舍入為一位數
    5.5拋出 ArithmeticException
    2.5拋出 ArithmeticException
    1.6拋出 ArithmeticException
    1.1拋出 ArithmeticException
    1.01
    -1.0-1
    -1.1拋出 ArithmeticException
    -1.6拋出 ArithmeticException
    -2.5拋出 ArithmeticException
    -5.5拋出 ArithmeticException

     


    http://blog.csdn.net/alanzyy/article/details/8465098
    posted on 2017-02-28 11:14 fly 閱讀(218) 評論(0)  編輯  收藏 所屬分類: java學習
    主站蜘蛛池模板: 少妇中文字幕乱码亚洲影视 | 无码人妻一区二区三区免费看| 国产三级电影免费观看| 亚洲乱妇熟女爽到高潮的片| 成人a免费α片在线视频网站| 国产亚洲精aa在线看| 成人毛片18女人毛片免费96| 亚洲熟妇AV乱码在线观看| 全免费一级午夜毛片| 国产精品亚洲精品久久精品 | 色欲A∨无码蜜臀AV免费播 | 一区二区免费国产在线观看 | 一级毛片免费毛片一级毛片免费| 色婷婷六月亚洲婷婷丁香| 国产四虎免费精品视频| 亚洲卡一卡二卡乱码新区| 国产又黄又爽又刺激的免费网址| 美女羞羞喷液视频免费| 亚洲无线码在线一区观看| 国产精品免费高清在线观看| 亚洲欧洲自拍拍偷午夜色| 免费毛片a在线观看67194| 色综合久久精品亚洲国产| 亚洲黄黄黄网站在线观看| 日本不卡免费新一区二区三区| 亚洲综合色一区二区三区小说| 成年美女黄网站色大免费视频| 国产亚洲漂亮白嫩美女在线| 亚洲精品无码永久中文字幕| 18女人腿打开无遮掩免费| 亚洲精品伦理熟女国产一区二区 | 67pao强力打造高清免费| 亚洲国产成人久久精品大牛影视 | 国产精品成人69XXX免费视频| 亚洲精品线在线观看| 大学生美女毛片免费视频| 亚洲精品视频免费观看| 亚洲精品美女在线观看播放| 国产91久久久久久久免费| 久久永久免费人妻精品下载| 日本系列1页亚洲系列|