我想在我的编辑文本中只显示两位小数,ofc我想在编辑文本中显示货币,但将其值限制为小数点后的2位数。
我看过一些使用正则表达式的解决方案,但我不想这样做。我被告知java支持一些可以做到这一点的内部库函数。任何人都可以给我提示或给我一些有效的代码。
此致
amount.setRawInputType(Configuration.KEYBOARD_12KEY);
amount.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
DecimalFormat formatVal = new DecimalFormat("##.##");
String formatted = formatVal.format(s);
amount.setText(formatted);
}
答案 0 :(得分:8)
您只需使用DecimalFormat
DecimalFormat format = new DecimalFormat("##.##");
String formatted = format.format(22.123);
editText.setText(formatted);
您将EditText
作为22.12
答案 1 :(得分:3)
这是一个在输入编辑文本时限制用户的解决方案。
InputFilter filter = new InputFilter() {
final int maxDigitsBeforeDecimalPoint=2;
final int maxDigitsAfterDecimalPoint=2;
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder(dest);
builder.replace(dstart, dend, source
.subSequence(start, end).toString());
if (!builder.toString().matches(
"(([1-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?"
)) {
if(source.length()==0)
return dest.subSequence(dstart, dend);
return "";
}
return null;
}
};
mEdittext.setFilters(new InputFilter[] { filter });
例如,12.22所以只允许输入前2位数字和小数点后2位数。
答案 2 :(得分:0)
您只需将setKeyListener()
分配给EditText
。
myEditText.setKeyListener(DigitsKeyListener.getInstance(true,true));
返回一个DigitsKeyListener
,它接受数字0到9,加上减号(仅在开头)和/或小数点(每个字段只有一个),如果指定的话。
答案 3 :(得分:0)
输入:
mBinding.etPriceUpdate.setText = getString(R.string.txt_rupees) + " " + "%.2f".format(firstNum!!.toDouble() * secondNum.toDouble())
输出:
₹4567.54
这将格式化浮点数1.23456最多2个小数位,因为在格式化指令%.2f中我们在小数点后使用了两个,f表示浮点数,其中包括double和float数据类型。 Java。此处不要尝试对双精度字符使用“ d”,因为它用于格式化整数,并且在格式化指令中代表十进制。顺便说一下,这里有个问题,format()方法也将任意舍入数字。例如,如果要格式化1.99999(最多2个小数位),则它将返回2.0,而不是1.99,如下所示。