如何在android中将数字转换为货币格式

问题描述 投票:11回答:9

我希望以货币格式显示我的数字,并将数字分开,如下例所示:

1000 -----> 1,000

10000 -----> 10,000

100000 -----> 100,000

1000000 -----> 1,000,000

谢谢

android
9个回答
11
投票

您需要使用数字格式化器,如下所示:

NumberFormat formatter = new DecimalFormat("#,###");
double myNumber = 1000000;
String formattedNumber = formatter.format(myNumber);
//formattedNumber is equal to 1,000,000

希望这可以帮助!


1
投票

另一种方法:

NumberFormat format = NumberFormat.getCurrencyInstance();
format.setMaximumFractionDigits(0);
format.setCurrency(Currency.getInstance("EUR"));

format.format(1000000);

这样,它显示1 000 000 €1,000,000 €,具体取决于设备货币的显示设置


5
投票

货币格式化程序。

    public static String currencyFormat(String amount) {
        DecimalFormat formatter = new DecimalFormat("###,###,##0.00");
        return formatter.format(Double.parseDouble(amount));
    }

4
投票

用这个:

int number = 1000000000;
String str = NumberFormat.getNumberInstance(Locale.US).format(number);
//str = 1,000,000,000

3
投票

尝试以下解决方案:

NumberFormat format = NumberFormat.getCurrencyInstance();
((TextView)findViewById(R.id.text_result)).setText(format.format(result));

该类将返回设备默认货币的格式化程序。

您可以参考此链接以获取更多信息:

https://developer.android.com/reference/java/text/NumberFormat.html


3
投票

此方法为您提供所需的确切输出:

public String currencyFormatter(String num) {
    double m = Double.parseDouble(num);
    DecimalFormat formatter = new DecimalFormat("###,###,###");
    return formatter.format(m);
}

2
投票
double number = 1000000000.0;
String COUNTRY = "US";
String LANGUAGE = "en";
String str = NumberFormat.getCurrencyInstance(new Locale(LANGUAGE, COUNTRY)).format(number);

//str = $1,000,000,000.00

1
投票

使用Formatter类例如:

String s = (String.format("%,d", 1000000)).replace(',', ' ');

看看:http://developer.android.com/reference/java/util/Formatter.html


1
投票

我在我们的应用程序中执行此操作的方式是:

amount.addTextChangedListener(new CurrencyTextWatcher(amount));

CurrencyTextWatcher是这样的:

public class CurrencyTextWatcher implements TextWatcher {

private EditText ed;
private String lastText;
private boolean bDel = false;
private boolean bInsert = false;
private int pos;

public CurrencyTextWatcher(EditText ed) {
    this.ed = ed;
}

public static String getStringWithSeparator(long value) {
    DecimalFormat formatter = (DecimalFormat) NumberFormat.getNumberInstance(Locale.US);
    String f = formatter.format(value);
    return f;
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    bDel = false;
    bInsert = false;
    if (before == 1 && count == 0) {
        bDel = true;
        pos = start;
    } else if (before == 0 && count == 1) {
        bInsert = true;
        pos = start;
    }
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    lastText = s.toString();
}

@Override
public void afterTextChanged(Editable s) {
    ed.removeTextChangedListener(this);
    StringBuilder sb = new StringBuilder();
    String text = s.toString();
    for (int i = 0; i < text.length(); i++) {
        if ((text.charAt(i) >= 0x30 && text.charAt(i) <= 0x39) || text.charAt(i) == '.' || text.charAt(i) == ',')
            sb.append(text.charAt(i));
    }
    if (!sb.toString().equals(s.toString())) {
        bDel = bInsert = false;
    }
    String newText = getFormattedString(sb.toString());
    s.clear();
    s.append(newText);
    ed.addTextChangedListener(this);

    if (bDel) {
        int idx = pos;
        if (lastText.length() - 1 > newText.length())
            idx--; // if one , is removed
        if (idx < 0)
            idx = 0;
        ed.setSelection(idx);
    } else if (bInsert) {
        int idx = pos + 1;
        if (lastText.length() + 1 < newText.length())
            idx++; // if one , is added
        if (idx > newText.length())
            idx = newText.length();
        ed.setSelection(idx);
    }
}

private String getFormattedString(String text) {
    String res = "";
    try {
        String temp = text.replace(",", "");
        long part1;
        String part2 = "";
        int dotIndex = temp.indexOf(".");
        if (dotIndex >= 0) {
            part1 = Long.parseLong(temp.substring(0, dotIndex));
            if (dotIndex + 1 <= temp.length()) {
                part2 = temp.substring(dotIndex + 1).trim().replace(".", "").replace(",", "");
            }
        } else
            part1 = Long.parseLong(temp);

        res = getStringWithSeparator(part1);
        if (part2.length() > 0)
            res += "." + part2;
        else if (dotIndex >= 0)
            res += ".";
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return res;
}

现在,如果你将这个观察者添加到你的EditText,一旦用户输入他的号码,观察者就会决定它是否需要分隔符。


1
投票

我将此代码用于我的项目,它的工作原理如下:

   EditText edt_account_amount = findViewById(R.id.edt_account_amount);
   edt_account_amount.addTextChangedListener(new DigitFormatWatcher(edt_account_amount));

和定义的类:

    public class NDigitCardFormatWatcher implements TextWatcher {

EditText et_filed;

String processed = "";


public NDigitCardFormatWatcher(EditText et_filed) {
    this.et_filed = et_filed;
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void afterTextChanged(Editable editable) {

    String initial = editable.toString();

    if (et_filed == null) return;
    if (initial.isEmpty()) return;
    String cleanString = initial.replace(",", "");

    NumberFormat formatter = new DecimalFormat("#,###");

    double myNumber = new Double(cleanString);

    processed = formatter.format(myNumber);

    //Remove the listener
    et_filed.removeTextChangedListener(this);

    //Assign processed text
    et_filed.setText(processed);

    try {
        et_filed.setSelection(processed.length());
    } catch (Exception e) {
        // TODO: handle exception
    }

    //Give back the listener
    et_filed.addTextChangedListener(this);

}

}

© www.soinside.com 2019 - 2024. All rights reserved.