回答:
次のprintf
ようにメソッドを使用できます。
System.out.printf("%.2f", val);
つまり、%.2f
構文は、書式指定子()の先頭から浮動小数点数()の10進表記で小数点以下val
2桁()で変数()を返すようにJavaに指示します。.2
f
%
他に使用できる変換文字は次のf
とおりです。
d
:10進整数o
:8進整数e
:科学表記法の浮動小数点Locale.FRANCE
?
Locale.US
は行き過ぎです。大文字小文字の変換、数値のレンダリングなどのために「ニュートラル」ロケールをハードコーディングする必要がある場合は、を指定しますLocale.ROOT
。これは、人間のユーザー向けにレンダリングされるのではなく、別のプログラムによって消費されるテキストに適しています。ユーザーに表示されるテキストについては、明示的に指定した場合でもデフォルトである場合でも、ロケールを尊重します。
使用できますDecimalFormat
。それを使用する1つの方法:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
もう1つは、#.##
フォーマットを使用して構築することです。
すべての書式設定オプションは、書式設定メソッドを呼び出すよりも読みにくいと思いますが、それは好みの問題です。
System.out.printf("%.2f", value)
構文?まだありますか?
DecimalFormat
答えを見続けたとき、私はすぐに自分が間違っていると思いましたが、それを明確にしていただきありがとうございます。
df.setMinimumFractionDigits(2);
2桁を強制的に追加する
コードでとして値が必要な場合は、String.format()を使用することをお勧めしString
ます。
たとえばString.format()
、次のように使用できます。
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
DecimalFormat df = new DecimalFormat("0.00");
多くの人々が言及しましたDecimalFormat
。ただしprintf
、Javaの最新バージョンがある場合にも使用できます。
System.out.printf("%1.2f", 3.14159D);
単純なトリックは、たとえば100
と乗算して、変数の短いバージョンを生成すること100.0
です。たとえば、丸めてから、もう一度除算します。このようにして、小数点以下2桁の変数を生成します。
double new_variable = Math.round(old_variable*100) / 100.0;
この「簡単なトリック」は常に私にとって十分であり、どの言語でも機能します(私はJavaの人ではなく、ただ学ぶだけです)。
最後に変更された以下のクイックコードを使用できます。ポイントの後に参照するゼロの数を追加します
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));
変数y1は以前は0.123456789でした。コードの後は、0.12のみになります。
DecimalFormatを見てください
これはチュートリアルの例です:
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
「###。##」のようなパターンを選択すると、小数点第2位が表示され、値は切り上げられると思います。リンクを調べて、希望する正確な形式を取得する必要があります(たとえば、後続ゼロが必要かどうか)。
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)
デモ用の小さなシンプルなプログラム:
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時間以上かかった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
これを試して:-
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);
}
}
String.format(java.util.Locale.US,"%.2f", val);