web-dev-qa-db-ja.com

Javaで小数点以下2桁のfloatデータの出力を表示する方法?

System.out.printでそれをすることができますか?

158
via_point

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

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

要するに、%.2f構文は、Javaに、浮動小数点数(valname__)の10進表現で小数点以下2桁(.2)の変数(fname__)を返すように指示します。書式指定子の開始(%)。

fname__以外にも使用できる変換文字があります。

  • dname__:10進整数
  • oname__:8進整数
  • ename__:科学表記法の浮動小数点
222

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

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

もう一つは#.##フォーマットを使ってそれを構築することです。

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

160
Bozho

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

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

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
77
John P.
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
36
Kevin Sylvestre
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
15
Phan Van Linh

多くの人がDecimalFormatを言っています。しかし、最近のバージョンのJavaがある場合はprintfを使用することもできます。

System.out.printf("%1.2f", 3.14159D);

printfフォーマット文字列についてのより詳しい情報はFormatterのドキュメントを参照してください

簡単なトリックはそれを掛けてあなたの変数のより短いバージョンを生成することです。 100、四捨五入して再度100.0で除算します。このようにして、小数位2桁で変数を生成します。

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

この「安っぽいトリック」は私にとっては常に十分で、どの言語でも機能します(私はJavaの人間ではないので、それを学ぶだけです)。

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

出力は22.35です。小数点が3つ必要な場合は、 "%。3f"に変更してください。

6
Aldin Philo

DecimalFormat をご覧ください。

これがチュートリアルの例です。

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

あなたが "###。##"のようなパターンを選ぶならば、あなたは小数点以下2桁を得るでしょう、そして私は値が切り上げられると思います。あなたが望む正確なフォーマットを得るためにリンクを見たいと思うでしょう(例えば、あなたが末尾のゼロが欲しいかどうか)

6
Uri

OK - 浮遊する文字列。

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)
3
YumYumYum

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

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

デモンストレーションのための小さな簡単なプログラム:

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
Pavan vadrevu

DecimalFormat-について1時間以上気になった問題の1つです。doubleとfloatの入力の扱いが異なります。 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
0
user2984447

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

0
Paul Efford

これを試して:-

private static String getDecimalFormat(double value) {

    String getValue = String.valueOf(value).split("[.]")[1];

      if (getValue.length() == 1) {
          return String.valueOf(value).split("[.]")[0] +
                "."+ getValue.substring(0, 1) + 
                String.format("%0"+1+"d", 0);
       } else {
          return String.valueOf(value).split("[.]")[0]
            +"." + getValue.substring(0, 2);
      }


 }
0