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的主要内容,如果未能解决你的问题,请参考以下文章

双无效。 android中的数字格式异常

如何限制Android中的输入数字长度?

Android Studio 中的货币格式

android为String中的数字添加逗号

如何在android的ListView数据中按数字格式搜索

将数字格式从 10000 更改为 10,000 android [重复]