2011-01-19 16 views
12

私はタイプdoubleの変数を持っているが、私は精度の3点で最大小数それを印刷する必要があるが、それは任意の末尾のゼロを持つべきではありません。私が必要ですフォーマットの浮動小数点数

2.5 // not 2.500 
2 // not 2.000 
1.375 // exactly till 3 decimals 
2.12 // not 2.120 

私はそれを間違っていますか?

DecimalFormat myFormatter = new DecimalFormat("0.000"); 
myFormatter.setDecimalSeparatorAlwaysShown(false); 

ありがとうございます。 :)

答えて

21

ではなく"0.000"のパターン"0.###"をお試しください:

import java.text.DecimalFormat; 

public class Main { 
    public static void main(String[] args) { 
     DecimalFormat df = new DecimalFormat("0.###"); 
     double[] tests = {2.50, 2.0, 1.3751212, 2.1200}; 
     for(double d : tests) { 
      System.out.println(df.format(d)); 
     } 
    } 
} 

出力:

2.5 
2 
1.375 
2.12 
+0

@ st0le、乾杯!追加情報は –

4

使用NumberFormatクラス。

例:

double d = 2.5; 
    NumberFormat n = NumberFormat.getInstance(); 
    n.setMaximumFractionDigits(3); 
    System.out.println(n.format(d)); 

出力は2.5ではなく、2.500となります。

6

解決策はほぼ正しいですが、10進数のフォーマットパターンで0を0に置き換える必要があります。

だから、次のようになります。

DecimalFormat myFormatter = new DecimalFormat("#.###"); 

そして(decimalSeparatorAlwaysShownはデフォルトでfalseあるとして)その行は必須ではありません。ここで

myFormatter.setDecimalSeparatorAlwaysShown(false); 

はjavadocをより短い要約です:

Symbol Location Localized? Meaning 
0 Number Yes Digit 
# Number Yes Digit, zero shows as absent 

javadocへのリンク:DecimalFormat

+0

+1です。 – st0le

+0

浮動小数点数をそのまま220.90として出力するには? –

関連する問題