6

クラスのメソッドと機能を試していますがNumberFormat、奇妙な結果になりました。次のプログラムをコンパイルして実行します。

public static void main(String[] args) {

Locale loc = Locale.US;
    NumberFormat nf = NumberFormat.getInstance(loc);
    System.out.println("Max: "+nf.getMaximumFractionDigits());
    System.out.println("Min: "+nf.getMinimumFractionDigits());
    try {
        Number d = nf.parse("4527.9997539");
        System.out.println(d);
        // nf.setMaximumFractionDigits(4);
        System.out.println(nf.format(4527.999753));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

出力は次のとおりです。

Max: 3
Min: 0
4527.9997539
4,528

つまり、小数桁は考慮されません。行のコメントを外すと:

nf.setMaximumFractionDigits(4);

出力は次のとおりです。

Max: 3
Min: 0
4527.9997539
4,527.9998

言い換えれば、それは問題なく動作します。メソッドで実際に何が起こっているsetMaximumFractionDigits()のでしょうか。最初のケースでは、3桁の小数を含む数値は表示されません。

4

3 に答える 3

13

やっと答えが見つかりました。このメソッドsetMaximumFractionDigits()は、メソッドにのみ影響しformat()ます。とは何の関係もありませんparse()。私のコードフラグメントformat()では、小数桁数を手動で4に設定した後、このメソッドを使用します。その結果、結果に影響します。

于 2013-02-02T10:11:26.517 に答える
3

小数点以下の桁数を手動で設定する場合は、次のいずれかのオプションを使用します。

まず:

  //sets 'd' to 3 decimal places & then assigns it to 'formattedNum'
   String formattedNum = String.format("%.3f", d); //variable 'd' taken from your code above 

また

  //declares an object of 'DecimalFormat'
   DecimalFormat aDF = new DecimalFormat("#.000"); 

  //formats value stored in 'd' to three decimal places
   String fomrattedNumber = aDF.format(d); 

私の意見では、2番目のオプションがあなたのケースに最も適しています。

于 2013-01-10T19:38:40.233 に答える
1

解析された文字列から作成された数値には、より多くの小数桁があります。ただし、出力しようとすると、formatを使用してMaximumFractionDigits、任意の数値から文字列を作成します。

于 2013-01-10T17:58:31.813 に答える