web-dev-qa-db-ja.com

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

倍精度の小数部のフォーマットに問題があります。もし私がdouble値を持っているなら、例えば4.0、代わりに4.00になるように小数をフォーマットする方法

99
Christoffer

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

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

出力:

4.00

193
kosa

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));
61
Rohit Jain

String.format を使用してください。

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

39

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

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

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

出力:

$52,000.00

フォーマットのための良い情報源は、主題に関する 公式 のJavaページです。

17

あなたはいつでも静的メソッドprintf from System.outを使うことができます - それから対応するフォーマッタを実装します。これにより、他の例で必要となるヒープスペースを節約できます。

例:

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

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

かなり大きなボーナスであるヒープスペースを節約します、それにもかかわらず、私はこの例が他の答えよりはるかに扱いやすいという意見を持っています、特にほとんどのプログラマーはCからprintf関数を知っているので。

6
Lewis Robbins
new DecimalFormat("#0.00").format(4.0d);
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
3

別の方法はsetMinimumFractionDigitsクラスのNumberFormatメソッドを使うことです。

ここでは、基本的に小数点以下の桁数を指定します。

したがって、4.0を入力すると、指定した量が2であると仮定して、4.00が生成されます。

しかし、あなたのDouble入力が指定された量を超える量を含む場合、それは指定された最小量を取り、そして切り上げ/切り捨てられたもう一つの数字を加えるでしょう

例えば、2を指定した4.15465454は、4.155を生成します。

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

オンラインで試す

1
achAmháin

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

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

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

    OR

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

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

上記のコードはすべて4.を出力します

0
Fazil

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));
    }

}
0
Mayank Parihar

あなたがこれを行うことができる多くの方法があります。それらは以下の通りです:

元の番号が以下のように与えられているとします。

 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;
0