文字列として与えられた次の数値をフォーマットする最良の方法は何ですか?
String number = "1000500000.574" //assume my value will always be a String
これを値を持つ文字列にしたい:1,000,500,000.57
どうすればそのようにフォーマットできますか?
文字列として与えられた次の数値をフォーマットする最良の方法は何ですか?
String number = "1000500000.574" //assume my value will always be a String
これを値を持つ文字列にしたい:1,000,500,000.57
どうすればそのようにフォーマットできますか?
DecimalFormat
クラスを見たいと思うかもしれません。さまざまなロケールをサポートしています (例: 一部の国では1.000.500.000,57
代わりにフォーマットされます)。
また、その文字列を数値に変換する必要があります。これは次の方法で実行できます。
double amount = Double.parseDouble(number);
コードサンプル:
String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");
System.out.println(formatter.format(amount));
これは、String.format() を使用して実現することもできます。これは、1 つの文字列で複数の数値をフォーマットする場合に、より簡単かつ/またはより柔軟な場合があります。
String number = "1000500000.574";
Double numParsed = Double.parseDouble(number);
System.out.println(String.format("The input number is: %,.2f", numParsed));
// Or
String numString = String.format("%,.2f", numParsed);
フォーマット文字列「%,.2f」の場合、「,」はコンマで区切られた数字グループを意味し、「.2」は小数点以下 2 桁に丸めることを意味します。
その他の書式設定オプションについては、 https://docs.oracle.com/javase/tutorial/java/data/numberformat.htmlを参照してください。
文字列を数値に変換したら、次を使用できます
// format the number for the default locale
NumberFormat.getInstance().format(num)
また
// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
独自の書式設定ユーティリティを作成しました。これは、多くの機能を提供するとともに、フォーマットの処理が非常に高速です:)
以下をサポートします。
コードはここにあります。次のように呼び出します。
public static void main(String[])
{
int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
String formatted = ValueFormat.format(1234567, settings);
}
また、これは小数のサポートを処理しないことも指摘しておく必要がありますが、整数値には非常に役立ちます。上記の例では、出力として「1.23M」が表示されます。おそらく10進数のサポートを追加できますが、あまり使用されていないので、これを数学計算用の圧縮されたchar []配列を処理するBigIntegerタイプのクラスにマージすることもできます。
以下のソリューションを使用することもできます
public static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
最初の回答は非常にうまく機能しますが、ZERO / 0 の場合は .00 としてフォーマットされます
したがって、フォーマット #,##0.00 は私にとってはうまく機能しています。本番システムにデプロイする前に、0 / 100 / 2334.30 や負の数値などのさまざまな数値を常にテストしてください。