Java 數(shù)字格式類

2018-02-12 21:25 更新

Java格式 - Java數(shù)字格式類


以下兩個類可用于格式化和解析數(shù)字:

  • java.text.NumberFormat
  • java.text.DecimalFormat

NumberFormat 類可以格式化一個數(shù)字特定地區(qū)的預(yù)定義格式。

DecimalFormat 類可以格式化數(shù)字以特定區(qū)域設(shè)置的自定義格式。

NumberFormat類的 getXXXInstance()方法返回格式化程序?qū)ο蟮膶?shí)例。

XXX可以由數(shù)字,貨幣,整數(shù)或百分比替換,或只是getInstance()。這些方法都是重載的。

如果你調(diào)用它們沒有參數(shù),它們返回一個格式化對象默認(rèn)語言環(huán)境。

使用number參數(shù)調(diào)用format()方法以將格式化的數(shù)字作為字符串。

import java.text.NumberFormat;

public class Main {
  public static void main(String[] args) {
    NumberFormat formatter;
    // Get number formatter for default locale
    formatter = NumberFormat.getInstance();
    System.out.println(formatter.format(12312.123123));
  }
}

上面的代碼生成以下結(jié)果。


例子

下面的代碼說明了如何以默認(rèn)格式為當(dāng)前語言環(huán)境,法語語言環(huán)境和德語語言環(huán)境格式化數(shù)字。

import java.text.NumberFormat;
import java.util.Locale;

public class Main {
  public static void main(String[] args) {
    double value = 123456789.9876543;

    // Default locale
    printFormatted(Locale.getDefault(), value);

    // Indian locale
    Locale indianLocale = new Locale("en", "IN");
    printFormatted(indianLocale, value);
  }

  public static void printFormatted(Locale locale, double value) {
    // Get number and currency formatter
    NumberFormat nf = NumberFormat.getInstance(locale);
    NumberFormat cf = NumberFormat.getCurrencyInstance(locale);

    System.out.println("Format value: " + value + "  for locale: " + locale);
    System.out.println("Number: " + nf.format(value));
    System.out.println("Currency: " + cf.format(value));
  }
}

上面的代碼生成以下結(jié)果。

DecimalFormat類

要執(zhí)行更高級的格式化,我們可以使用DecimalFormat類。

DecimalFormat類允許我們提供我們自己的格式模式。 的下表顯示模式及其用法。

符號位置含義
0Number代表數(shù)字
#Number數(shù)字,零顯示為不存在
.Number小數(shù)分隔符或貨幣小數(shù)分隔符
-Number減號
,Number分組分隔符
ENumber以科學(xué)記數(shù)法分隔尾數(shù)和指數(shù)。
;子模式邊界分隔正和負(fù)子模式
%字首或字尾乘以100并以百分比顯示
\u2030字首或字尾乘以1000,并顯示為每毫米值

一旦我們創(chuàng)建了DecimalFormat類的對象,就可以改變格式模式使用其 applyPattern()方法。

import java.text.DecimalFormat;

public class Main {
  private static DecimalFormat formatter = new DecimalFormat();

  public static void main(String[] args) {
    formatNumber("##.##", 12.345);
    formatNumber("##.##", 12.345);
    formatNumber("0000.0000", 12.345);
    formatNumber("#.##", -12.345);

    // Positive and negative number format 
    formatNumber("#.##;(#.##)", -12.735);
  }

  public static void formatNumber(String pattern, double value) {
    // Apply the pattern formatter.applyPattern ( pattern );

    String formattedNumber = formatter.format(value);

    System.out.println("Number:" + value + ", Pattern:" + pattern
        + ", Formatted Number:" + formattedNumber);
  }
}

上面的代碼生成以下結(jié)果。

解析

我們還可以使用 parse()方法將字符串解析為數(shù)字。 parse()方法返回 java.lang.Number 類的對象。

我們可以使用 java.lang.Number 類中的xxxValue()方法來獲取原始值,其中xxx可以是byte,double,float,int,long和short。

import java.text.DecimalFormat;
import java.text.ParsePosition;

public class Main {
  private static DecimalFormat formatter = new DecimalFormat();

  public static void main(String[] args) {
    // Parse a string to decimal number
    String str = "qq1,234.567";
    String pattern = "#,###.###";
    formatter.applyPattern(pattern);

    // Create a ParsePosition object to specify the first digit of
    // number in the string. It is 1 in "qq1,234.567"
    // with the index 2.
    ParsePosition pp = new ParsePosition(2);

    Number numberObject = formatter.parse(str, pp);

    double value = numberObject.doubleValue();
    System.out.println("Parsed Value  is " + value);
  }

}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號