在 Android 中使用 DecimalFormat 格式化数字
Format a number using DecimalFormat in Android
我有一个 EditText 并且我设置了一个输入过滤器以仅允许抱怨此正则表达式的数字:
^\d{1,8}(\.\d{0,2})?$
即8位整数和2位小数。
请注意,“0”。允许(1 位数字后跟一个句点)。
在 edittext 焦点丢失时,我想阅读 edittext 中的文本并将其格式化以显示分组的数字并删除不重要的数字。比如一些场景:
1) 如果用户键入 1000。(句点在末尾且后面没有数字),我想在 edittext 中显示 1,000
2)如果用户键入 000012. 或 000012 或 000012.0 或 000012.00 我想显示 12
3) 如果用户输入 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”时有效。不直接转换为 long(例如,在转换之前在字符串末尾附加一个额外的零)。
我有一个 EditText 并且我设置了一个输入过滤器以仅允许抱怨此正则表达式的数字:
^\d{1,8}(\.\d{0,2})?$
即8位整数和2位小数。
请注意,“0”。允许(1 位数字后跟一个句点)。
在 edittext 焦点丢失时,我想阅读 edittext 中的文本并将其格式化以显示分组的数字并删除不重要的数字。比如一些场景:
1) 如果用户键入 1000。(句点在末尾且后面没有数字),我想在 edittext 中显示 1,000 2)如果用户键入 000012. 或 000012 或 000012.0 或 000012.00 我想显示 12 3) 如果用户输入 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”时有效。不直接转换为 long(例如,在转换之前在字符串末尾附加一个额外的零)。