欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java格式化數(shù)字操作 NumberFormat及DecimalFormat

 更新時間:2021年10月12日 09:46:23   作者:知我飯否  
這篇文章主要介紹了java格式化數(shù)字操作 NumberFormat及DecimalFormat,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

前言

以前用到要對數(shù)字格式的地方,都是直接到網(wǎng)上搜一下。拿過來能用就行。因為平時用的不多。但是最近的項目對這個用的多了。網(wǎng)上拿來的不夠用了。自己看了java源碼把這方面惡補了。而且最近也好長時間沒有寫博客了。正好寫一篇拋磚引玉吧。

如果你只想知道怎么用,可以直接看下面使用示例↓↓↓。三分鐘速成。

正文

如果你對java源碼比較了解。你會發(fā)現(xiàn)java對文字,數(shù)字的格式化,是有一個公共的父類的Format。

NumberFormat和DecimalFormat都是它的子類關(guān)于數(shù)字的。

DateFormat和SimpleDateFormat也是它的子類關(guān)于文字的。

當(dāng)然今天只說NumberFormat和DecimalFormat。相信我,當(dāng)你搞懂這兩個以后,那么DateFormat和SimpleDateFormat也是肯定會的。

首先,要特別注意的是 NumberFormat和DecimalFormat是線程不安全的。 這意味你如果同時有多個線程操作一個format實例對象,會出現(xiàn)意想不到的結(jié)果。

解決方法有兩個:

上面的這兩種方法呢,

第一種方法 **比較占用內(nèi)存多,但是速度快,效率高。并發(fā)。**第二種方法 **占用內(nèi)存少,效率低,耗費時間長,畢竟要排隊嘛,串行。**具體取舍,看項目的情況。

JavaAPI官方描述

NumberFormat

NumberFormat幫助您格式化和解析任何區(qū)域設(shè)置的數(shù)字。您的代碼可以完全獨立于小數(shù)點,千位分隔符的區(qū)域設(shè)置約定,甚至是使用的特定十進制數(shù)字,或者數(shù)字格式是否為十進制。

DecimalFormat

DecimalFormat是NumberFormat十進制數(shù)字格式的具體子類 。它具有多種功能,旨在解析和格式化任何語言環(huán)境中的數(shù)字,包括支持西方,阿拉伯語和印度語數(shù)字。它還支持不同類型的數(shù)字,包括整數(shù)(123),定點數(shù)(123.4),科學(xué)記數(shù)法(1.23E4),百分比(12%)和貨幣金額(123美元)。所有這些都可以本地化。

NumberFormat

獲取NumberFormat實例

//創(chuàng)建 一個整數(shù)格式 地區(qū)用系統(tǒng)默認的
NumberFormat integerNumber = NumberFormat.getIntegerInstance(Locale.getDefault());
  • 使用getInstance或getNumberInstance獲取正常的數(shù)字格式。
  • 使用getIntegerInstance得到的整數(shù)格式。
  • 使用getCurrencyInstance來獲取貨幣數(shù)字格式。
  • 使用getPercentInstance獲取顯示百分比的格式。

常用方法

在這里插入圖片描述

由于API 的描述足夠詳細,所以我就直接截圖上來了。

使用示例

DecimalFormat是NumberFormat,所以,就不要單獨的為NumberFormat寫一個完整的示例了。只寫一下配合FieldPosition怎么使用的示例:

NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
//整數(shù)部分不會每隔三個,就會有 " ,"
numberFormat.setGroupingUsed(false);
//線程安全的字符串緩沖類
StringBuffer stringBuffer = new StringBuffer();
//構(gòu)造參數(shù) 是Format子類里面的 自己特有的參數(shù),傳入就行
//構(gòu)造 小數(shù)部分的,所以開始 beginIndex()是從小數(shù)點 后面算的,  但是0是從整個格式化數(shù)字,第一個算起, 包括 之間用于分組的 " ,"
FieldPosition fieldPosition = new FieldPosition(NumberFormat.FRACTION_FIELD);
stringBuffer = numberFormat.format(1234.56789, stringBuffer, fieldPosition);
System.out.println(stringBuffer.toString());
//小數(shù)部分, 所以 從5 開始
System.out.println(fieldPosition.getBeginIndex() + "   " + fieldPosition.getEndIndex());
//切割字符串
System.out.println(stringBuffer.toString().substring(fieldPosition.getBeginIndex()));

運行結(jié)果

在這里插入圖片描述

DecimalFormat

獲取DecimalFormat實例

要獲取特定地區(qū)(包括默認地區(qū))的NumberFormat,請調(diào)用NumberFormat的工廠方法之一,例如getInstance()。通常,不要直接調(diào)用DecimalFormat構(gòu)造函數(shù),因為NumberFormat工廠方法可能返回DecimalFormat之外的子類。如果需要自定義format對象,可以這樣做:

        try {
            NumberFormat f = NumberFormat.getInstance(Locale.getDefault());
            if (f instanceof DecimalFormat) {
                ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
                //寫具體的代碼
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

設(shè)置Pattern

DecimalFormat作為NumberFormat的具體實現(xiàn)子類,最大的特點就是 可以使用Pattern。來實現(xiàn)最大程度的對數(shù)據(jù)格式進行定制。

一個Pattern中的許多字符是按字面意思理解的;它們在解析期間匹配,在格式化期間輸出不變,就是字符在Pattern中 不影響最后的數(shù)字格式化另一方面,特殊字符代表其他字符、字符串或字符類。如果要以文字形式出現(xiàn)在前綴或后綴中,必須引用它們(除非另有說明)。

在這里插入圖片描述

子類特有的方法

因為懶,而且這玩意是在簡單,大家就將就看個截圖吧。

使用示例

接下來就是萬眾矚目的示例代碼了,只要java基礎(chǔ)可以,一開始看這個完全就可以學(xué)會用法。

通用格式

        //創(chuàng)建一個默認的通用格式
        NumberFormat numberFormat = NumberFormat.getInstance();
        DecimalFormat numberDecimalFormat;
        //捕捉異常,以防強制類型轉(zhuǎn)換出錯
        try {
            //強制轉(zhuǎn)換成DecimalFormat
            numberDecimalFormat = (DecimalFormat) numberFormat;
            //保留小數(shù)點后面三位,不足的補零,前面整數(shù)部分 每隔四位 ,用 “,” 符合隔開
            numberDecimalFormat.applyPattern("#,####.000");
            //設(shè)置舍入模式 為DOWN,否則默認的是HALF_EVEN
            numberDecimalFormat.setRoundingMode(RoundingMode.DOWN);
            //設(shè)置 要格式化的數(shù) 是正數(shù)的時候。前面加前綴
            numberDecimalFormat.setPositivePrefix("Prefix  ");
            System.out.println("正數(shù)前綴  "+numberDecimalFormat.format(123456.7891));
            //設(shè)置 要格式化的數(shù) 是正數(shù)的時候。后面加后綴
            numberDecimalFormat.setPositiveSuffix("  Suffix");
            System.out.println("正數(shù)后綴  "+numberDecimalFormat.format(123456.7891));
            //設(shè)置整數(shù)部分的最大位數(shù)
            numberDecimalFormat.setMaximumIntegerDigits(3);
            System.out.println("整數(shù)最大位數(shù) "+numberDecimalFormat.format(123456.7891));
            //設(shè)置整數(shù)部分最小位數(shù)
            numberDecimalFormat.setMinimumIntegerDigits(10);
            System.out.println("整數(shù)最小位數(shù) "+numberDecimalFormat.format(123456.7891));
            //設(shè)置小數(shù)部分的最大位數(shù)
            numberDecimalFormat.setMaximumFractionDigits(2);
            System.out.println("小數(shù)部分最大位數(shù) "+numberDecimalFormat.format(123.4));
            //設(shè)置小數(shù)部分的最小位數(shù)
            numberDecimalFormat.setMinimumFractionDigits(6);
            System.out.println("小數(shù)部分最小位數(shù) "+numberDecimalFormat.format(123.4));
        }catch (Exception e){
            e.printStackTrace();
        }

運行結(jié)果

在這里插入圖片描述

獲取百分比格式

對數(shù)字 進行 百分比 格式化

        //創(chuàng)建一個中國地區(qū)的 百分比格式
        NumberFormat perFormat = NumberFormat.getPercentInstance(Locale.CHINA);
        DecimalFormat percentFormat;
        try {
            percentFormat = (DecimalFormat) perFormat;
            //設(shè)置Pattern 會使百分比格式,自帶格式失效
//            percentFormat.applyPattern("##.00");
            //設(shè)置小數(shù)部分 最小位數(shù)為2
            percentFormat.setMinimumFractionDigits(2);
            System.out.println(percentFormat.format(0.912345));
        } catch (Exception e) {
            e.printStackTrace();
        }

運行結(jié)果:

在這里插入圖片描述

貨幣格式

        //創(chuàng)建一個中國地區(qū)的 貨幣格式
        NumberFormat curFormat = NumberFormat.getCurrencyInstance(Locale.CHINA);
        DecimalFormat currencyFormat;
        try {
            currencyFormat = (DecimalFormat) curFormat;
            //設(shè)置Pattern 會使百分比格式,自帶格式失效
//            currencyFormat.applyPattern("##.00");
            System.out.println(currencyFormat.format(0.912345));
            //乘法 數(shù)乘以多少 這個方法是 百分比時候 設(shè)置成100   km時候 是1000
            currencyFormat.setMultiplier(100);
            System.out.println(currencyFormat.format(0.912345));
        } catch (Exception e) {
            e.printStackTrace();
        }

運行結(jié)果:

在這里插入圖片描述

整數(shù)格式

因為它很簡單,作用就是只解析 整數(shù)部分的。小數(shù)部分的會被舍入。

例如 “3456.78”→3456(并且在索引6之后保留解析位置)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)簡單猜數(shù)字

    java實現(xiàn)簡單猜數(shù)字

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單猜數(shù)字,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Spring強大事務(wù)兼容數(shù)據(jù)庫多種組合解決業(yè)務(wù)需求

    Spring強大事務(wù)兼容數(shù)據(jù)庫多種組合解決業(yè)務(wù)需求

    這篇文章主要為大家介紹了Spring強大事務(wù)兼容數(shù)據(jù)庫多種組合解決業(yè)務(wù)需求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Java小白第一次就能看懂的網(wǎng)絡(luò)編程

    Java小白第一次就能看懂的網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫運行在多個設(shè)備(計算機)的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。本文介紹了一些網(wǎng)絡(luò)編程基礎(chǔ)的概念,并用Java來實現(xiàn)TCP和UDP的Socket的編程,來讓讀者更好的了解其原理
    2021-08-08
  • spring boot整合spring-kafka實現(xiàn)發(fā)送接收消息實例代碼

    spring boot整合spring-kafka實現(xiàn)發(fā)送接收消息實例代碼

    這篇文章主要給大家介紹了關(guān)于spring-boot整合spring-kafka實現(xiàn)發(fā)送接收消息的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來看看吧。
    2017-06-06
  • java 從服務(wù)器下載文件并保存到本地的示例

    java 從服務(wù)器下載文件并保存到本地的示例

    本篇文章主要介紹了java 從服務(wù)器下載文件并保存到本地的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java Arrays.AsList原理及用法實例

    Java Arrays.AsList原理及用法實例

    這篇文章主要介紹了Java Arrays.AsList原理及用法實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Java同步代碼塊和同步方法原理與應(yīng)用案例詳解

    Java同步代碼塊和同步方法原理與應(yīng)用案例詳解

    這篇文章主要介紹了Java同步代碼塊和同步方法原理與應(yīng)用,結(jié)合具體案例形式分析了使用java同步代碼塊和同步方法實現(xiàn)買票功能的相關(guān)原理與操作技巧,需要的朋友可以參考下
    2019-10-10
  • 淺談java分頁三個類 PageBean ResponseUtil StringUtil

    淺談java分頁三個類 PageBean ResponseUtil StringUtil

    下面小編就為大家?guī)硪黄獪\談java分頁三個類 PageBean ResponseUtil StringUtil。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 關(guān)于JVM翻越內(nèi)存管理的墻

    關(guān)于JVM翻越內(nèi)存管理的墻

    這篇文章主要介紹了JVM翻越內(nèi)存管理的墻,由虛擬機管理內(nèi)存看起來一切都很美好,但也正是因為把控制內(nèi)存的權(quán)力交給了Java虛擬機,一旦出現(xiàn)內(nèi)存泄漏和溢出方面的問題,就不得不從Java虛擬機角度上去排查問題,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Java運算符從見過到掌握上

    Java運算符從見過到掌握上

    計算機的最基本用途之一就是執(zhí)行數(shù)學(xué)運算,作為一門計算機語言,Java也提供了一套豐富的運算符來操縱變量,本篇對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09

最新評論