Java数字格式
當我看到其他人編寫不必要的Java代碼并且由于缺乏對已經提供所需功能的JDK類的了解而編寫了不必要的Java代碼時,我會想到很多次。 這樣的一個例子是時間相關的常量的使用硬編碼值的寫入,如60 , 24 , 1440 ,和86400時TIMEUNIT提供了更好的,標準化的方法。 在這篇文章中,我看一看一個類的示例,該示例提供了開發人員經常在其上實現的功能: NumberFormat 。
NumberFormat類是java.text包的一部分,該包還包括常用的DateFormat和SimpleDateFormat類。 NumberFormat是一個抽象類(沒有公共構造函數),其后代的實例是通過具有諸如getInstance() , getCurrencyInstanceInstance()和getPercentInstance()之類的重載靜態方法獲得的。
貨幣
下一個代碼清單演示了如何調用NumberFormat.getCurrencyInstance(Locale)以獲取NumberFormat的實例,該實例以貨幣友好格式顯示數字。
演示NumberFormat的貨幣支持
/*** Demonstrate use of a Currency Instance of NumberFormat.*/ public void demonstrateCurrency() {writeHeaderToStandardOutput("Currency NumberFormat Examples");final NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US);out.println("15.5 -> " + currencyFormat.format(15.5));out.println("15.54 -> " + currencyFormat.format(15.54));out.println("15.345 -> " + currencyFormat.format(15.345)); // rounds to two decimal placesprintCurrencyDetails(currencyFormat.getCurrency()); }/*** Print out details of provided instance of Currency.** @param currency Instance of Currency from which details* will be written to standard output.*/ public void printCurrencyDetails(final Currency currency) {out.println("Concurrency: " + currency);out.println("\tISO 4217 Currency Code: " + currency.getCurrencyCode());out.println("\tISO 4217 Numeric Code: " + currency.getNumericCode());out.println("\tCurrency Display Name: " + currency.getDisplayName(Locale.US));out.println("\tCurrency Symbol: " + currency.getSymbol(Locale.US));out.println("\tCurrency Default Fraction Digits: " + currency.getDefaultFractionDigits()); }執行以上代碼后,結果如下所示:
================================================================================== = Currency NumberFormat Examples ================================================================================== 15.5 -> $15.50 15.54 -> $15.54 15.345 -> $15.35 Concurrency: USDISO 4217 Currency Code: USDISO 4217 Numeric Code: 840Currency Display Name: US DollarCurrency Symbol: $Currency Default Fraction Digits: 2上面的代碼和相關的輸出表明,用于貨幣的NumberFormat實例(實際上是DecimalFormat )會根據語言環境自動應用適當的位數和適當的貨幣符號。
百分比
下一個代碼清單和相關的輸出演示了NumberFormat使用,以百分比友好格式顯示數字。
演示NumberFormat的百分比格式
/*** Demonstrate use of a Percent Instance of NumberFormat.*/ public void demonstratePercentage() {writeHeaderToStandardOutput("Percentage NumberFormat Examples");final NumberFormat percentageFormat = NumberFormat.getPercentInstance(Locale.US);out.println("Instance of: " + percentageFormat.getClass().getCanonicalName());out.println("1 -> " + percentageFormat.format(1));// will be 0 because truncated to Integer by Integer divisionout.println("75/100 -> " + percentageFormat.format(75/100));out.println(".75 -> " + percentageFormat.format(.75));out.println("75.0/100 -> " + percentageFormat.format(75.0/100));// will be 0 because truncated to Integer by Integer divisionout.println("83/93 -> " + percentageFormat.format((83/93)));out.println("93/83 -> " + percentageFormat.format(93/83));out.println(".5 -> " + percentageFormat.format(.5));out.println(".912 -> " + percentageFormat.format(.912));out.println("---- Setting Minimum Fraction Digits to 1:");percentageFormat.setMinimumFractionDigits(1);out.println("1 -> " + percentageFormat.format(1));out.println(".75 -> " + percentageFormat.format(.75));out.println("75.0/100 -> " + percentageFormat.format(75.0/100));out.println(".912 -> " + percentageFormat.format(.912)); }================================================================================== = Percentage NumberFormat Examples ================================================================================== 1 -> 100% 75/100 -> 0% .75 -> 75% 75.0/100 -> 75% 83/93 -> 0% 93/83 -> 100% .5 -> 50% .912 -> 91% ---- Setting Minimum Fraction Digits to 1: 1 -> 100.0% .75 -> 75.0% 75.0/100 -> 75.0% .912 -> 91.2%代碼和百分比的輸出NumberFormat使用表明,通過默認的實例NumberFormat (實際上是一個DecimalFormat通過返回在這種情況下) NumberFormat.getPercentInstance(區域)的方法沒有小數位,乘所提供的數目由100(假定它是(如果提供的話,則為百分比的十進制等效值 ),并添加一個百分號(%)。
整數
接下來顯示的少量代碼及其相關輸出演示了NumberFormat使用,以整數格式顯示數字。
演示NumberFormat的整數格式
/*** Demonstrate use of an Integer Instance of NumberFormat.*/ public void demonstrateInteger() {writeHeaderToStandardOutput("Integer NumberFormat Examples");final NumberFormat integerFormat = NumberFormat.getIntegerInstance(Locale.US);out.println("7.65 -> " + integerFormat.format(7.65));out.println("7.5 -> " + integerFormat.format(7.5));out.println("7.49 -> " + integerFormat.format(7.49));out.println("-23.23 -> " + integerFormat.format(-23.23)); }================================================================================== = Integer NumberFormat Examples ================================================================================== 7.65 -> 8 7.5 -> 8 7.49 -> 7 -23.23 -> -23如上面的代碼和相關輸出所示, NumberFormat方法getIntegerInstance(Locale)返回一個實例,該實例將提供的數字表示為整數。
固定位數
下一個代碼清單和相關輸出演示了如何使用NumberFormat打印浮點數的定點表示形式。 換句話說,使用NumberFormat可以使一個數字在小數點左側(“整數”數字)和小數點右側(“小數”數字)的正好具有規定位數的數字表示。
演示定點數字的NumberFormat
/*** Demonstrate generic NumberFormat instance with rounding mode,* maximum fraction digits, and minimum integer digits specified.*/ public void demonstrateNumberFormat() {writeHeaderToStandardOutput("NumberFormat Fixed-Point Examples");final NumberFormat numberFormat = NumberFormat.getNumberInstance();numberFormat.setRoundingMode(RoundingMode.HALF_UP);numberFormat.setMaximumFractionDigits(2);numberFormat.setMinimumIntegerDigits(1);out.println(numberFormat.format(234.234567));out.println(numberFormat.format(1));out.println(numberFormat.format(.234567));out.println(numberFormat.format(.349));out.println(numberFormat.format(.3499));out.println(numberFormat.format(0.9999)); }================================================================================== = NumberFormat Fixed-Point Examples ================================================================================== 234.23 1 0.23 0.34 0.35 1上面的代碼和相關的輸出演示了對最小“整數”位數的精確控制,該位數代表小數點左邊(至少一個,因此在適用時顯示為零)和最大“分數”小數點右邊的數字。 盡管未顯示,但也可以指定最大整數位數和最小分數位數。
結論
我曾經用過這篇文章來研究如何使用NumberFormat以不同的方式顯示數字(貨幣,百分比,整數,固定的小數點等),并且通常意味著無需編寫或減少代碼即可將數字寫成數字格式。 當我第一次開始寫這篇文章時,我設想包括有關NumberFormat的直接后代( DecimalFormat和ChoiceFormat )的示例和討論,但是已經確定這篇文章已經足夠冗長了。 我可能會在以后的博客文章中介紹NumberFormat這些后代。
翻譯自: https://www.javacodegeeks.com/2014/08/java-numeric-formatting.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
                            
                        - 上一篇: 安卓电视棒刷机(安卓电视棒)
 - 下一篇: 武汉新房备案价查询(武汉新房备案)