android中的格式数字0.000
Posted
技术标签:
【中文标题】android中的格式数字0.000【英文标题】:format number 0.000 in android 【发布时间】:2014-05-22 04:30:41 【问题描述】:我正在尝试使用此方法将我的数字从 1000000 格式化为 1.000.000,并将诸如 102 之类的数字格式化为 10,2:
public class NumberTextWatcher implements TextWatcher
private DecimalFormat df;
private DecimalFormat dfnd;
private boolean hasFractionalPart;
private EditText et;
public NumberTextWatcher(EditText et)
df = new DecimalFormat("#.###,##");
df.setDecimalSeparatorAlwaysShown(true);
dfnd = new DecimalFormat("#,###");
this.et = et;
hasFractionalPart = false;
@SuppressWarnings("unused")
private static final String TAG = "NumberTextWatcher";
@Override
public void afterTextChanged(Editable s)
et.removeTextChangedListener(this);
try
int inilen, endlen;
inilen = et.getText().length();
String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "");
Number n = df.parse(v);
int cp = et.getSelectionStart();
if (hasFractionalPart)
et.setText(df.format(n));
else
et.setText(dfnd.format(n));
endlen = et.getText().length();
int sel = (cp + (endlen - inilen));
if (sel > 0 && sel <= et.getText().length())
et.setSelection(sel);
else
et.setSelection(et.getText().length() - 1);
catch (NumberFormatException nfe)
catch (ParseException e)
et.addTextChangedListener(this);
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())))
hasFractionalPart = true;
else
hasFractionalPart = false;
但我得到了错误,他们在 logcat 中说:
05-22 11:29:01.270: E/androidRuntime(27277): FATAL EXCEPTION: main
05-22 11:29:01.270: E/AndroidRuntime(27277): java.lang.IllegalArgumentException: #.###,##
05-22 11:29:01.270: E/AndroidRuntime(27277): at java.text.DecimalFormat.initNative(DecimalFormat.java:567)
05-22 11:29:01.270: E/AndroidRuntime(27277): at java.text.DecimalFormat.<init>(DecimalFormat.java:560)
05-22 11:29:01.270: E/AndroidRuntime(27277): at java.text.DecimalFormat.<init>(DecimalFormat.java:538)
05-22 11:29:01.270: E/AndroidRuntime(27277): at id.co.ajsmsig.espaj.method.NumberTextWatcher.<init>(NumberTextWatcher.java:23)
我的方法有问题吗?如果是,你能告诉我我的错在哪里吗?
【问题讨论】:
我认为你必须使用 Locale 来实现这一点。 【参考方案1】:您收到此异常是因为您使用的设备的区域设置与您使用的掩码不匹配。
运行这个程序,看看当前语言环境的默认掩码是什么:
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Test
public static void main(String[] args)
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat)nf;
String output = df.format(123456789.01);
System.out.println(output);
然后使用使用该掩码的语言环境应用您想要的掩码。这是给德国的:
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class Test
public static void main(String[] args)
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);
DecimalFormat df = (DecimalFormat)nf;
String output = df.format(123456789.01);
System.out.println(output);
输出为123.456.789,01
在这里完成详细信息:http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
【讨论】:
你能告诉我如何用java for android格式实现你的代码吗? 是一样的。您还拥有 Android 上的语言环境。只是不是主要方法:) 但我不知道如何在 android 中为我的十进制格式调用语言环境:( 当前语言环境 = getResources().getConfiguration().locale; 很抱歉回复晚了,不,这对我没有帮助:(以上是关于android中的格式数字0.000的主要内容,如果未能解决你的问题,请参考以下文章