2013-01-10 7 views
6

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

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 

はそれがOKに動作します。メソッドsetMaximumFractionDigits()で実際に何が起こっていますか?最初のケースで3小数点の数字を含む数値は返されませんか?

+0

数値の小数点以下の桁数を手動で設定することを意味しますか? –

答えて

11

最後に答えが見つかりました。方法setMaximumFractionDigits()は、方法format()にのみ影響します。それはparse()とは関係ありません。私のコードでは、手動で小数点以下桁数を4に設定した後にformat()メソッドを使用します。その結果、結果に影響します。

1

解析された文字列から作成された数値には、小数点以下の桁数があります。しかし、出力しようとすると、指定されたNumberからStringを作成するために、フォーマットのMaximumFractionDigitsが使用されます。

+0

私はまだ問題の原因を理解できません。手動の最大桁数をsetMaximumFractionDigitsメソッドで3に設定しても、小数部のない数値が返されます。私はそれが3桁の小数部分を思い付くはずだと思う。 – arjacsoh

2

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

:私の意見では

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

OR

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

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

番目のオプションのスーツあなたの場合に最適です。

関連する問題