Javaで小数点以下2桁のフロートを印刷する方法は?


回答:


250

次のprintfようにメソッドを使用できます。

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

つまり、%.2f構文は、書式指定子()の先頭から浮動小数点数()の10進表記で小数点以下val2桁()で変数()を返すようにJavaに指示します。.2f%

他に使用できる変換文字は次のfとおりです。

  • d:10進整数
  • o:8進整数
  • e:科学表記法の浮動小数点

13
String.formatは現在のローカル構成に依存するため、注意してください。セパレータとしてドットを取得できない場合があります。使用することをおString.format(java.util.Locale.US,"%.2f", val);
勧め

1
@gominoどうしてLocale.FRANCE
エリクソン2016年

3
@gominoそのとおり。では、なぜフランスのユーザーのためにドットを数字に入れるのでしょうか?
エリクソン2016年

1
このコメントは、常にドットを区切り文字として使用することを期待している人に警告するために追加したものです。
Gomino 2016年

6
@gominoそれは理にかなっていますが、ハードコーディングを「好む」と考えるのLocale.USは行き過ぎです。大文字小文字の変換、数値のレンダリングなどのために「ニュートラル」ロケールをハードコーディングする必要がある場合は、を指定しますLocale.ROOT。これは、人間のユーザー向けにレンダリングされるのではなく、別のプログラムによって消費されるテキストに適しています。ユーザーに表示されるテキストについては、明示的に指定した場合でもデフォルトである場合でも、ロケールを尊重します。
エリクソン2016年

179

使用できますDecimalFormat。それを使用する1つの方法:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

もう1つは、#.##フォーマットを使用して構築することです。

すべての書式設定オプションは、書式設定メソッドを呼び出すよりも読みにくいと思いますが、それは好みの問題です。


11
何が起こったのでSystem.out.printf("%.2f", value)構文?まだありますか?
Anthony Forloney

6
そうです。それはオプションです-あなたの答えを元に戻すことができます;)
Bozho

DecimalFormatの使用方法がまだわからないので、これは私のオプションのようです:)ありがとう!
via_point 2010年

私はしばらくJavaの大規模な作業を行っていないので、DecimalFormat答えを見続けたとき、私はすぐに自分が間違っていると思いましたが、それを明確にしていただきありがとうございます。
Anthony Forloney

9
df.setMinimumFractionDigits(2);2桁を強制的に追加する
Terel

88

コードでとして値が必要な場合は、String.format()を使用することを勧めしStringます。

たとえばString.format()、次のように使用できます。

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);

14
「%.02f」と「%.2f」は同じものです
Borzh

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

5
こんにちはケビン、10.0000と入力した場合、10しか得られません。10.00を表示したい場合、どうすればよいですか?
Mdhar9e 2014

2
@ Mdhar9eの使用DecimalFormat df = new DecimalFormat("0.00");
K.Sopheak 2016

16
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24

4
ロケールによっては、コンマが表示される場合があります。ドットセパレータが必要な場合は、DecimalFormat( "#。##"、DecimalFormatSymbols(Locale.US))
DPM

10
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

出力は22.35です。小数点が3つ必要な場合は、「%。3f」に変更します。



9

単純なトリックは、たとえば100と乗算して、変数の短いバージョンを生成すること100.0です。たとえば、丸めてから、もう一度除算します。このようにして、小数点以下2桁の変数を生成します。

double new_variable = Math.round(old_variable*100) / 100.0;

この「簡単なトリック」は常に私にとって十分であり、どの言語でも機能します(私はJavaの人ではなく、ただ学ぶだけです)。


1
これは間違っています。100で除算した後、多くの数値は浮動小数点表現で繰り返し数になります。したがって、小数点以下2桁ではありません。
マット2016年

8

最後に変更された以下のクイックコードを使用できます。ポイントの後に参照するゼロの数を追加します

float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");  
y1 = Float.valueOf(df.format(y1));

変数y1は以前は0.123456789でした。コードの後は、0.12のみになります。


2
ポイントの前に0は表示されません。DecimalFormatである必要がありますdf = new DecimalFormat( "0.00");
リドゥヴァルシャン

確かに!DecimalFormat( "0.00")も機能します!素晴らしいスポット。
ベイ

6

DecimalFormatを見てください

これはチュートリアルの例です:

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);

「###。##」のようなパターンを選択すると、小数点第2位が表示され、値は切り上げられると思います。リンクを調べて、希望する正確な形式を取得する必要があります(たとえば、後続ゼロが必要かどうか)。


5

以下は、Javaで小数点以下2桁の浮動小数点データの出力を表示する方法のコードです。

float ratingValue = 52.98929821f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98

3

OK-strを浮動にします。

package test;

import java.text.DecimalFormat;

public class TestPtz {
  public static void main(String[] args) {
    String preset0 = "0.09,0.20,0.09,0.07";
    String[] thisto = preset0.split(",");    
    float a = (Float.valueOf(thisto[0])).floatValue();
    System.out.println("[Original]: " + a);   
    a = (float) (a + 0.01);

    // Part 1 - for display / debug
    System.out.printf("[Local]: %.2f \n", a);
    // Part 2 - when value requires to be send as it is
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(2);
    df.setMaximumFractionDigits(2);
    System.out.println("[Remote]: " + df.format(a));

  }
}

出力:

run:
[Original]: 0.09
[Local]: 0.10 
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)

1

デモ用の小さなシンプルなプログラム:

import java.io.*;
import java.util.Scanner;

public class twovalues {

    public static void main(String args[]) {

        float a,b;
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter Values For Calculation");

        a=sc.nextFloat();
        b=sc.nextFloat();

        float c=a/b;
        System.out.printf("%.2f",c);
    }
}

1

String str = System.out.printf("%.2f", val).replace(",", ".");ユーザーのロケールとは関係なく、常に「。」を取得/表示することを確認したい場合にだけ行います。小数点記号として。これは、後で何らかの変換を行う場合にプログラムをクラッシュさせたくない場合に必要です。float f = Float.parseFloat(str);


1

私に1時間以上かかった1つの問題DecimalFormat-ダブル入力とフロート入力の処理が異なります。RoundingModeの変更でさえ助けにはなりませんでした。私は専門家ではありませんが、私のような人に役立つかもしれないと思いました。Math.round代わりに使用してしまいました。下記参照:

    DecimalFormat df = new DecimalFormat("#.##");
    double d = 0.7750;
    System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
    float f = 0.7750f;
    System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
    // change the RoundingMode
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
    System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));

出力:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77

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