Javaでの2桁の10進フォーマット


118

doubleの小数のフォーマットに問題があります。4.0などの二重値がある場合、小数点を4.00にフォーマットするにはどうすればよいですか?


String.format()またはを使用してみてくださいjava.text.Format
Code-Apprentice


回答:


218

1つの方法は、NumberFormatを使用することです。

NumberFormat formatter = new DecimalFormat("#0.00");     
System.out.println(formatter.format(4.0));

出力:

4.00


1
ええ、でもコンマは必要ありません。小数点記号が必要です。
Christoffer

カンマを取得しています。これは私がやったことです。"double variable; NumberFormat formatter = new DecimalFormat("#0.00 "); System.out.println(formatter.format(variable));
Christoffer

そのための出力はX.00ではなくX、00です
Christoffer

9
JVMで使用されるデフォルトの言語がおそらくNambariの言語と異なるため、コンマを取得しています。NumberFormatのjavadocを見ている:docs.oracle.com/javase/1.4.2/docs/api/java/text/...を
マイケルZilbermann

1
zim2001が指摘したように、ロケールは異なる場合があります。私の回答で提供されているリンクを読んでください。最後に、これに関する情報があります。
kosa 2012年

73

Java 8では、formatメソッドを使用できます。

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • ffloatingポイント値に使用されます。
  • 2 小数点以下は、小数点以下の桁数を示します .

ほとんどのJavaバージョンでは、以下を使用できますDecimalFormat

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));

43

String.formatを使用します

String.format("%.2f", 4.52135);

ドキュメントに従って:

常に使用されるロケールは、によって返されるロケールですLocale.getDefault()


8
String.formatは、小数点記号のフォーマットを考慮に入れるために、最初のパラメーターとしてロケールも受け入れます。
Vincent Mimoun-Prat 2012

4
ロケール固有の小数点記号(コンマなど)を回避するには、USロケールを指定します。String.format(Locale.US、 "%。2f"、4.52135);
Alexander233

3
「米国のロケール固有のドットを小数点記号として使用するには、米国のロケールを指定します」と言います。米国の習慣は正しいものであり、それ以外はすべて「民俗」的なものであるというこの考えは、私を狂わせます。
Simone Gianni

@SimoneGianni愚かな仮定をしないでください。小数点がドットである必要がある人もいます。たとえば、CSVドキュメントをエクスポートする関数を書いていて、コンマ文字が区切り文字であるため、コンマを使用できません。
Kaiser Keister

19

String.formatを使用して、これを行うことができます。

double price = 52000;
String.format("$%,.2f", price);

これが@Vincentの回答と異なるコンマに注意してください

出力:

$52,000.00

書式設定に適したリソースは、件名の公式 Javaページです。


6

常に静的メソッドを使用できprintf from System.outます。対応するフォーマッタを実装します。これにより、他の例で必要となるヒープ領域が節約されます。

例:

System.out.format("%.4f %n", 4.0); 

System.out.printf("%.2f %n", 4.0); 

かなり大きなボーナスであるヒープ領域を節約しますが、この例は他のどの回答よりもはるかに扱いやすいと私は考えています。特に、ほとんどのプログラマはCのprintf関数を知っているためです(Javaは関数/メソッドをわずかに変更します)。


1
@Baz私はここで重要な詳細を欠いていますか、言及されたprintStreamはありません。OPは、標準出力ストリームへのフォーマットヘルプ(Javaドキュメントを参照することでより簡単に解決できる)を求めています。説明してください。
Lewis Robbins

私の悪い。間違ったjavadocバージョン(1.4)を見ていました。ところで:outですPrintStream
Baz

@Baz心配ありません。はい、私はそれがあなたが参照していたクラスだと思いました、私のすべての本では、printfはSystem.outからの静的メソッドと呼ばれています(これらのメソッドは静的であるため)。
Lewis Robbins

1
正確にprintfは、はの静的メソッドですPrintStreamここを参照してください ;)しかし、+ 1です。
Baz

@Bazドキュメントから、printStreamクラスはSystem.outを継承しました。私はおそらく間違っている可能性があります-静的メソッドを継承するのはかなり奇妙ですが(それは可能ですか?)あなたは、私は正しいことを期待しています。
Lewis Robbins



1

代替メソッドはsetMinimumFractionDigitsNumberFormatクラスのメソッドを使用することです。

ここでは基本的に、小数点の後に表示する数値の数を指定します。

したがって、指定された量が2であると仮定4.0すると4.00

ただし、Double入力に指定された量よりも多い場合は、指定された最小量が使用され、切り上げ/切り下げられた数字が1つ追加されます。

たとえば4.15465454、最低2を指定すると、4.155

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));

オンラインでお試しください


1

これを行うには多くの方法があります。それらは以下のとおりです。

元の番号が以下のようになっているとします。

 double number = 2354548.235;

NumberFormatの使用:

NumberFormat formatter = new DecimalFormat("#0.00");
    System.out.println(formatter.format(number));

String.formatを使用:

System.out.println(String.format("%,.2f", number));

DecimalFormatとパターンの使用:

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
        DecimalFormat decimalFormatter = (DecimalFormat) nf;
        decimalFormatter.applyPattern("#,###,###.##");
        String fString = decimalFormatter.format(number);
        System.out.println(fString);

DecimalFormatとパターンの使用

DecimalFormat decimalFormat = new DecimalFormat("############.##");
        BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
        System.out.println(formattedOutput);

すべての場合で、出力は次のようになります: 2354548.23

丸め中にRoundingModeフォーマッターを追加できます。以下は、いくつかの丸めモードです。

    decimalFormat.setRoundingMode(RoundingMode.CEILING);
    decimalFormat.setRoundingMode(RoundingMode.FLOOR);
    decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
    decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
    decimalFormat.setRoundingMode(RoundingMode.UP);

ここにインポートがあります:

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

1

以下のいずれかの方法を使用できます

  1. 使用している場合 java.text.DecimalFormat

    DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance(); 
    decimalFormat.setMinimumFractionDigits(2); 
    System.out.println(decimalFormat.format(4.0));

    または

    DecimalFormat decimalFormat =  new DecimalFormat("#0.00"); 
    System.out.println(decimalFormat.format(4.0)); 
  2. 単純な文字列形式に変換したい場合

    System.out.println(String.format("%.2f", 4.0)); 

上記のすべてのコードは4.00を印刷します


0

100%動作します。

import java.text.DecimalFormat;

public class Formatting {

    public static void main(String[] args) {
        double value = 22.2323242434342;
        // or  value = Math.round(value*100) / 100.0;

        System.out.println("this is before formatting: "+value);
        DecimalFormat df = new DecimalFormat("####0.00");

        System.out.println("Value: " + df.format(value));
    }

}

-3

最初のインポートNumberFormat。次にこれを追加します:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

これにより、小数点以下2桁が表示され、通貨を扱う場合はドル記号が表示されます。

import java.text.NumberFormat;
public class Payroll 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
    int hoursWorked = 80;
    double hourlyPay = 15.52;

    double grossPay = hoursWorked * hourlyPay;
    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

    System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
    }

}

1
質問は通貨の表示に関するものではなく、他の回答で説明されているようなフォーマット関数を使用してより正確に回答されます。
yacc、2015年

-4

次のようにして行うことができます。

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

1
##代わりに使用しているため機能しません00
Joaquin Iurchuk

-4

これは古いトピックであることはわかっていますが、コンマではなくピリオドを使いたい場合は、結果をX、00として文字列に保存し、ピリオドを変更するだけでX.00を取得できます。

最も簡単な方法は、単にreplaceを使用することです。

String var = "X,00";
String newVar = var.replace(",",".");

出力は、必要なX.00になります。また、簡単にするために、一度にすべてを実行して、それをdouble変数に保存できます。

Double var = Double.parseDouble(("X,00").replace(",",".");

この返信は今のところ役に立たないことはわかっていますが、このフォーラムをチェックする誰かがこのような簡単な解決策を探しているかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.