我有一个EditText,我设置了一个输入过滤器,只允许抱怨这个正则表达式的数字:
^\d{1,8}(\.\d{0,2})?$
即 8 个整数和 2 个小数位。
请注意,"0"。允许使用(1 位数字后跟一个句点)。
在编辑文本焦点丢失时,我想阅读编辑文本中的文本并将其格式化以显示分组的数字并删除不有效的数字。例如,某些方案:
1) 如果用户键入 1000。(句点在末尾,后面不跟数字),我想在编辑文本中显示 1,0002) 如果用户键入000012。或 000012 或 000012.0 或 000012.00 我想显示 123)如果用户键入1230.90,我想显示1,230.9
所以我在下面执行,假设文本是要格式化的数字:
// Prepare format to apply
DecimalFormat format = new DecimalFormat();
format.setGroupingUsed(true);
format.setMaximumIntegerDigits(8);
format.setMaximumFractionDigits(2);
// Formats the number
String formattedText = format.format(text);
我知道我能做到:
DecimalFormat format = new DecimalFormat("########.##");
因此,当使用以下命令应用格式时:
String formattedText = format.format(text);
它崩溃了。
例如,我试图格式化 0. 和 0.5 数字,但没有运气。
如何摆脱这个?
首先将text
变量强制转换为数字(包括处理解析失败的任何异常)。单参数格式重载预计为长整型或双精度型。请参阅:http://developer.android.com/reference/java/text/DecimalFormat.html#inhmethods
您可能需要添加一些额外的字符串逻辑,以确保如果"0."不直接转换为长整型,则强制转换有效(例如,在强制转换之前在字符串末尾附加一个额外的零)。