String.format()は、Javaでdoubleをフォーマットします


178

String.format(format String、X)を使用して次のようにdoubleをフォーマットするにはどうすればよいですか?

2354548.235-> 2,354,548.23

ありがとう!

回答:


295
String.format("%1$,.2f", myDouble);

String.format 自動的にデフォルトのロケールを使用します。


36
特定のロケールを使用することもできますString.format(Locale.GERMAN, "%1$,.2f", myDouble);
オリビエグレゴワール

13
フォーマットするdoubleが複数ある場合は、%1、%2などを使用します。たとえば、String.format( "%1 $ ,. 2f、%2 $ ,. 2f"、myDouble、a​​Double)
Moesio

4
この場合、「%1 $」はオプションであると思います。「%,. 2f」をフォーマット文字列として使用するだけで機能します。
Matt Passell、2014年

5
はい、マットは正しいです。%1, %2などを使用して、入力引数のインデックスに基づいて出力を並べ替えることができます。参照してくださいこれを。インデックスを省略することができ、デフォルトの順序はフォーマッターによって想定されます。
16

1
さまざまな部分の意味を説明する必要があります。
MitulátBATI

41
String.format("%4.3f" , x) ;

これは、ansに合計4桁が必要であり、そのうち3桁が10進数の後にあることを意味します。また、fはdoubleのフォーマット指定子です。xは、検索する変数を意味します。私のために働いた。。。


1
これは、引数の4番目の変数となり、小数点以下3桁になることを意味します。
マイケルフルトン

@MichaelFulton簡単ではありません:String.format("%014.3f" , 58.656565)-> 0000000058,657:合計14個の記号:8つのゼロと5つの数字、1つのコンマ。したがって、この場合の数値14 、結果の文字列内のシンボルの合計数(余分なものは先行ゼロで置き換えられますが、それがない場合はスペースで置き換えられます)を意味します.3一部はここで完全に独立しています。
パーサー

ただし、ここでは:String.format("%014.3f" , 58.656565)-> 58,657。私はそれがその.3f部分に優先するのでそれを採用します:最初に小数点以下3桁で数値を出力し、記号が残っている場合は先行スペース(またはゼロ/何でも)を出力します。この場合、数値は2 + 3 + 1 = 6シンボルであり、4だけを印刷したかったため、余分なスペースはありません。
パーサー

24

手動で設定したシンボルでフォーマットする場合は、次のようにします。

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);
System.out.println(decimalFormat.format(1237516.2548)); //1,237,516.25

ただし、ロケールベースのフォーマットが推奨されます。


3
役に立つ答え!ただし、最後の文「ロケールベースのフォーマットが推奨されますが、」はコンテキストなしでは意味がありません。文字列の特定のフォーマットを生成したい場合、ロケールベースのフォーマットを使用すべきではないかなり良いユースケースがあります。たとえば、外部ファイルへのデータのエクスポートを実装していて、現在の(または任意の)ロケールに依存せずに、フォーマットを完全に制御したいとします。
Honza Zidek 2016

20

このリンクから抽出されたコード。

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + " " + 
                   currentLocale.toString());

この例の出力は、同じ数値の形式がロケールによってどのように異なるかを示しています。

345 987,246  fr_FR
345.987,246  de_DE
345,987.246  en_US

13
public class MainClass {
   public static void main(String args[]) {
    System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);

    System.out.printf("Default floating-point format: %f\n", 1234567.123);
    System.out.printf("Floating-point with commas: %,f\n", 1234567.123);
    System.out.printf("Negative floating-point default: %,f\n", -1234567.123);
    System.out.printf("Negative floating-point option: %,(f\n", -1234567.123);

    System.out.printf("Line-up positive and negative values:\n");
    System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
  }
}

そしてプリントアウト:

3(3)+3 00003
デフォルトの浮動小数点形式:1234567,123000
カンマ付きの浮動小数点数:1.234.567,123000
負の浮動小数点のデフォルト:-1.234.567,123000
負の浮動小数点オプション:(1.234.567、 123000)

ラインアップの正と負の値:
1.234.567,12
-1.234.567,12


2

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

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

NumberFormat丸めモードの使用

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
    DecimalFormat decimalFormatter = (DecimalFormat) nf;
    decimalFormatter.applyPattern("#,###,###.##");
    decimalFormatter.setRoundingMode(RoundingMode.CEILING);

    String fString = decimalFormatter.format(number);
    System.out.println(fString);

文字列フォーマッターの使用

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

すべての場合において、出力は次のようになります: 2354548.24

丸め中に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

使用する DecimalFormat

 NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
 DecimalFormat decimalFormatter = (DecimalFormat) nf;
 decimalFormatter.applyPattern("#,###,###.##");
 String fString = decimalFormatter.format(myDouble);
 System.out.println(fString);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.