アンドロイドで、数値を異なるフォーマットに表示するために、どのような関数を使用することができますか?
例えば、以下のような場合です。 1000と入力したら、1000と表示する。 10000と入力したら、10000と表示する。 1000000と入力したら、1,000,000と表示させたい。
ご指導ください。
DecimalFormat` を使用して、単に数値をフォーマットすることもできます。
DecimalFormat formatter = new DecimalFormat("#,###,###");
String yourFormattedString = formatter.format(100000);
結果は次のようになります。
1,000,000
となります。1,000
です。2019年12月02日更新。
この String.format("%,d", number)
は、@DreaminginCode さんの下のコメントで示されたように、より良い(ハードコードされていない)ソリューションになると思いますので、代替案としてここに追加しようと思います。
以下のようにテキスト変更リスナーを追加します(Edittextに選択されている入力タイプがNumberであることも確認してください)。
etTest.addTextChangedListener(new TextWatcher() {
boolean isManualChange = false;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (isManualChange) {
isManualChange = false;
return;
}
try {
String value = s.toString().replace(",", "");
String reverseValue = new StringBuilder(value).reverse()
.toString();
StringBuilder finalValue = new StringBuilder();
for (int i = 1; i <= reverseValue.length(); i++) {
char val = reverseValue.charAt(i - 1);
finalValue.append(val);
if (i % 3 == 0 && i != reverseValue.length() && i > 0) {
finalValue.append(",");
}
}
isManualChange = true;
etTest.setText(finalValue.reverse());
etTest.setSelection(finalValue.length());
} catch (Exception e) {
// Do nothing since not a number
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});