【问题标题】:Format a number using DecimalFormat in Android在 Android 中使用 DecimalFormat 格式化数字
【发布时间】:2015-03-03 09:24:30
【问题描述】:

我有一个 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'很奇怪...... format() 需要一个数字。
  • 是的,这就是问题所在。格式需要一个数字而不是字符串...

标签: java android number-formatting decimalformat


【解决方案1】:

首先将text 变量转换为数字(包括处理解析失败的任何异常)。单参数格式重载需要一个 long 或 double。见:http://developer.android.com/reference/java/text/DecimalFormat.html#inhmethods

您可能需要添加一些额外的字符串逻辑以确保强制转换在“0”时有效。不直接转换为 long(例如,在转换之前在字符串末尾附加一个额外的零)。

【讨论】:

  • 对,我已经解析为 double: Double.parseDouble(text) 然后应用了 format.format,现在它可以工作了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多