numberformat.getInstance()メソッドは、ローカル設定に基づいて数値をフォーマットするのに適したNumberformatのインスタンス(実際、DecimalFormatなどのNumberformatの特定のサブクラス)を返します。ドイツなどの非デフォルト地域設定も使用できます。フォーマット法は、特定の地域ルールに従って数値をフォーマットします。このプログラムは、単純な形式でも使用できます。
numberformat.getInstance()。形式(1234.56)
ただし、フォーマットを保存してから再利用する方が効率的です。国際化は、数値をフォーマットする際の大きな問題です。
もう1つは、分数部分の数字数を指定するなど、形式を効果的に制御することです。この問題を解決するための簡単な例を次に示します。
Import java.text.decimalformat; import java.util.locale; public class decimalformat2 {public static void main(string args []){//ローカルデフォルト形式のdecimalformat df1 = new decimalformat( "####。000"); System.out.println(df1.format(1234.56)); //ドイツ形式のlocale.setDefault(locale.german)を取得します。 Decimalformat df2 = new Decimalformat( "####。000"); system.out.println(df2.format(1234.56));}}}この例では、「#### .000」などのシンボルを使用して、番号形式が設定されています。このモードは、小数点の前に4つの数値があることを意味します。十分でない場合は、空になります。小数点の後に3つの数値がある場合、0。プログラム出力が入力されます。
1234.560
1234,560
同様に、指数形式の形式も制御できます。
java.text.decimalformatをインポートします。 public class decimalformat3 {public static void main(string args []){decimalformat df = new decimalformat( "0.000e0000"); System.out.println(df.format(1234.56));}}出力:
1.235E0003
パーセンテージの場合:
import java.text.numberformat; public class decimalformat4 {public static void main(string args []){numberformat nf = numberformat.getPercentInstance(); system.out.println(nf.format(0.47));}}}}出力:
47%
これまでのところ、数値をフォーマットするためのいくつかの異なる手法を見てきました。一方、フォーマットされた番号を含む文字列を読み取り、解析するにはどうすればよいですか?解像度サポートはNumberformatに含まれています。例えば:
Import java.util.locale; Import java.text.numberformat; import java.text.parseexception; public class decimalformat5 {public static void main(string args []){// local format numberformat nf1 = numberformat.getInstance();オブジェクトobj1 = null; //フォーマットベースの解析try {obj1 = nf1.parse( "1234,56"); } catch(parseexception e1){system.err.println(e1); } system.out.println(obj1); //ドイツ形式Numberformat nf2 = numberformat.getInstance(locale.german);オブジェクトobj2 = null; //フォーマットベースの解析try {obj2 = nf2.parse( "1234,56"); } catch(parseexception e2){system.err.println(e2); } system.out.println(obj2); }}この例は2つの部分に分かれており、どちらも文字列「1234,56」を解析します。最初の部分はローカル形式を使用して解析しますが、2番目の部分はドイツ形式を使用して解析します。プログラムが米国で実行されると、結果は次のとおりです。
123456
1234.56
言い換えれば、「1234,56」は、米国の巨大な整数「123456」、ドイツの小数「1234.56」と見なされます。
DecimalformatおよびNumberformat接続
上記の例では、DecimalFormatとNumberformatの両方が使用されます。 Decimalformatは、多くの場合、優れたフォーマットコントロールを取得するために使用されますが、Numberformatはローカルとは異なる領域を指定するために使用されることがよくあります。 2つのカテゴリを組み合わせる方法は?
答えは、DecimalformatがNumberformatのサブクラスであり、そのインスタンスが特定の領域として指定されているという事実を中心に展開します。したがって、numberformat.getInstanceを使用して領域を指定してから、構造を小数点図オブジェクトにキャストできます。ドキュメントでは、この手法はほとんどの場合に適用できるが、コンバージョンが正しく機能しない場合に備えて、キャストを囲むためにトライ/キャッチブロックを使用する必要がある(おそらく非常に目立たない状況で奇妙な領域を使用する必要がある)。これが次のような例です。
Import java.text.decimalformat; import java.text.numberformat; import java.util.locale; public class decimalformat6 {public static void main(string args []){decimalformat df = null; // numberformatオブジェクトを取得し、// decimalformatオブジェクトに// cast {df =(decimalformat)numberformat.getInstance(locale.german); } catch(classcastException e){system.err.println(e); } //フォーマットモードdf.ApplyPattern( "####。00000"); //数字system.out.println(df.format(1234.56)); }} getInstance()メソッドはフォーマットを取得し、applypattern()メソッドを呼び出してフォーマットモード、出力を設定します。
1234,56000
国際化を気にしない場合は、DecimalFormatを直接使用できます。
ここで、Vは未処理のダブルで、スケールは必要な精度であり、小数桁を必要とするダブルを返します。
public static double Round(double v、int scale){if(scale <0){throw new IllegalargumentException( "スケールは正の整数またはゼロでなければならない"); } bigdecimal b = new bigdecimal(double.tostring(v)); bigdecimal one = new bigdecimal( "1"); b.divide(1つ、スケール、bigdecimal.round_half_up).doublevalue(); }上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。