文字列として与えられた次の数値をフォーマットする最良の方法は何ですか?
String number = "1000500000.574" //assume my value will always be a String
値が1,000,500,000.57
のStringにしたい
そのようにフォーマットするにはどうすればよいですか?
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));
文字列を数値に変換したら、使用できます
// format the number for the default locale
NumberFormat.getInstance().format(num)
または
// format the number for a particular locale
NumberFormat.getInstance(locale).format(num)
これは、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 を参照してください。
独自のフォーマットユーティリティを作成しました。これは、多くの機能を提供するとともにフォーマットの処理が非常に高速です:)
以下をサポートします。
コードは here にあります。次のように呼び出します:
public static void main(String[])
{
int settings = ValueFormat.COMMAS | ValueFormat.PRECISION(2) | ValueFormat.MILLIONS;
String formatted = ValueFormat.format(1234567, settings);
}
また、これは10進数のサポートを処理しないが、整数値には非常に役立つことを指摘する必要があります。上記の例では、出力として「1.23M」が表示されます。たぶん小数サポートを追加できたかもしれませんが、それをあまり使用しなかったので、数学計算用に圧縮されたchar []配列を処理するBigIntegerタイプのクラスにこれをマージすることもできます。
これがformat number commas Java
のGoogleで一番の結果であることを考えると、整数で作業していて小数を気にしない人に役立つ答えがあります。
String.format("%,d", 2000000)
出力:
2,000,000
public void convert(int s)
{
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(s));
}
public static void main(String args[])
{
LocalEx n=new LocalEx();
n.convert(10000);
}
以下のソリューションも使用できます-
public static String getRoundOffValue(double value){
DecimalFormat df = new DecimalFormat("##,##,##,##,##,##,##0.00");
return df.format(value);
}
そこに到達する最も簡単な方法は次のとおりです。
String number = "10987655.876";
double result = Double.parseDouble(number);
System.out.println(String.format("%,.2f",result));
出力:10,987,655.88
次のコードを使用して、変換全体を1行で実行できます。
String number = "1000500000.574";
String convertedString = new DecimalFormat("#,###.##").format(Double.parseDouble(number));
DecimalFormatコンストラクターの最後の2つの#記号も0にすることができます。どちらの方法でも機能します。
最初の答えは非常にうまくいきますが、ZERO/0の場合は.00としてフォーマットされます
したがって、#、## 0.00という形式はうまく機能しています。本番システムにデプロイする前に、常に0/100/2334.30や負の数などの異なる数をテストしてください。