文字列をフォーマットして3桁のグループの間にカンマを追加しようとしています
例えば:
1200.20 >> 1,200.20
15000 >> 15,000
私はDecimalFormatでそれを行う方法を理解しようとしています。ここまで、非常に複雑に見える自分のスクリプトを使用しています。私はそれを行う方法を理解できません。#を使用すると、末尾のゼロが非表示になり、0を使用すると数値に追加されます。
これは私が今試していることです:
DecimalFormat df = new DecimalFormat("###,###.####", new DecimalFormatSymbols(Locale.US));
resultStr = df.format(Double.valueOf(resultStr));
簡単なはずですが、どうすればいいのかわかりません。 DecimalFormatを使用する必要はありません。簡単な方法だと思いました。小数を変更せずにカンマを追加するにはどうすればよいですか?
NumberFormatオブジェクトを使用し、グループ化を使用するように設定する必要があります。何かのようなもの
import Java.text.DecimalFormat;
import Java.text.NumberFormat;
import Java.util.Locale;
public class NumberFormatEg {
public static void main(String[] args) {
NumberFormat myFormat = NumberFormat.getInstance();
myFormat.setGroupingUsed(true);
double[] numbers = { 11220.00, 232323232.24, 121211.55, 102.121212 };
for (double d : numbers) {
System.out.println(myFormat.format(d));
}
System.out.println();
DecimalFormat decimalFormat = new DecimalFormat("#.00");
decimalFormat.setGroupingUsed(true);
decimalFormat.setGroupingSize(3);
for (double d : numbers) {
System.out.println(decimalFormat.format(d));
}
System.out.println("\nFor Germany");
NumberFormat anotherFormat = NumberFormat
.getNumberInstance(Locale.GERMAN);
if (anotherFormat instanceof DecimalFormat) {
DecimalFormat anotherDFormat = (DecimalFormat) anotherFormat;
anotherDFormat.applyPattern("#.00");
anotherDFormat.setGroupingUsed(true);
anotherDFormat.setGroupingSize(3);
for (double d : numbers) {
System.out.println(anotherDFormat.format(d));
}
}
System.out.println("\nFor US:");
anotherFormat = NumberFormat.getNumberInstance(Locale.US);
if (anotherFormat instanceof DecimalFormat) {
DecimalFormat anotherDFormat = (DecimalFormat) anotherFormat;
anotherDFormat.applyPattern("#.00");
anotherDFormat.setGroupingUsed(true);
anotherDFormat.setGroupingSize(3);
for (double d : numbers) {
System.out.println(anotherDFormat.format(d));
}
}
}
}
これは次を返します:
11,220
232,323,232.24
121,211.55
102.121
11,220.00
232,323,232.24
121,211.55
102.12
For Germany
11.220,00
232.323.232,24
121.211,55
102,12
For US:
11,220.00
232,323,232.24
121,211.55
102.12
これの利点は、ソリューションをロケール固有にすることができることです。
編集済み
次に、DecimalFormatオブジェクトの例を示します。これを使用する場合は、グループ化サイズを設定する必要があることに注意してください。
次のようなことも試すことができます
DecimalFormat df = new DecimalFormat("#,###.00");
System.out.println(df.format(1200.20));
System.out.println(df.format(15000));
System.out.println(df.format(123456789.99));
1,200.20 15,000.00 123,456,789.99
あなたが望むことを正確に行うことができるはずです:
http://docs.Oracle.com/javase/tutorial/i18n/format/decimalFormat.html
DecimalFormat myFormatter = new DecimalFormat("$###,###.###");
String output = myFormatter.format(12345.67);
System.out.println(value + " " + pattern + " " + output);
最もシンプルなソリューション
comma ,
フラグ with printf
。
System.out.printf( "%,d\n", 58625 );// the d to accept decimal integer
System.out.printf( "%,.2f", 12345678.9 );// the f to accept folouting point and 2 to take only 2 digits
出力は
58,625
12,345,678.90
そして良いニュース:実際に生成されたセパレーターはis specific to the user’s locale
他の解決策を機能させることができませんでした。小数を四捨五入したり、末尾のゼロを追加したり、末尾のゼロを削除したりします。
私は自分の答えを受け入れるつもりはありませんが、誰かがそれが役立つと思った場合に備えて、スクリプトを投稿します。
public void(String str) {
int floatPos = str.indexOf(".") > -1 ? str.length() - str.indexOf(".") : 0;
int nGroups= (str.length()-floatPos-1-(str.indexOf("-")>-1?1:0))/3;
for(int i=0; i<nGroups; i++){
int commaPos = str.length() - i * 4 - 3 - floatPos;
str = str.substring(0,commaPos) + "," + str.substring(commaPos,str.length());
}
return str;
}
1 => 1
1.0 => 1.0
1234.01 => 1,234.01
1100100.12345 => 1,100,100.12345