簡體   English   中英

如何使用具有三個小數位的貨幣掩碼?

[英]How to use a currency mask with three decimal places?

我正在使用一個類將EditText的值格式化為貨幣。 此類使用函數NumberFormat.getCurrencyInstance()。format((parsed / 100)); 格式化。 這堂課讓我以兩個小數位(R $ 2,00)的價值。 我希望它有三個小數位(2,000雷亞爾)。 其為氣體值。 在巴西,這里的天然氣使用小數點后三位。

這是我正在使用的課程:

public class MascaraMonetaria implements TextWatcher{

final EditText mEditText;
String current;
static Context context;
public MascaraMonetaria(EditText mEditText, String current, Context context) {
    super();
    this.mEditText = mEditText;
    this.current = current;     
}

@Override
public void afterTextChanged(Editable arg0) {}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}

@Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
    if (!s.toString().equals(current)) {
        mEditText.removeTextChangedListener(this);

        String cleanString = s.toString().replaceAll("[R$,.]", "");

        double parsed = Double.parseDouble(cleanString);
        String formatted = NumberFormat.getCurrencyInstance().format((parsed/100));

        current = formatted;

        mEditText.setText(formatted);
        mEditText.setSelection(formatted.length());
        mEditText.addTextChangedListener(this);
    }

}

public static double stringMonetarioToDouble(String str) {
    double retorno = 0;
    try {
        boolean hasMask = ((str.indexOf("R$") > -1 || str.indexOf("$") > -1) && (str
                .indexOf(".") > -1 || str.indexOf(",") > -1));
        // Verificamos se existe máscara
        if (hasMask) {
            // Retiramos a mascara.
            str = str.replaceAll("[R$]", "").replaceAll("[$]", "").replaceAll("[.]", "").replaceAll("[,]", ".");
        }    
        // Transformamos o número que está escrito no EditText em double.
        retorno = Double.parseDouble(str);

    } catch (NumberFormatException e) {

    }
    return retorno;

}

}

我做到了,我通過以下答案使用代碼: 正確將貨幣格式設置為比語言環境指定的小數位數更多的位

這是我的代碼:

        formatted.setMinimumFractionDigits(3);
        formatted.setMaximumFractionDigits(3);

        current = formatted.format((parsed/1000));

        mEditText.setText(formatted.format((parsed/1000)));
        mEditText.setSelection(formatted.format((parsed/1000)).length());
        mEditText.addTextChangedListener(this);

您可以只創建一個小數點格式器到小數點后三位,並在需要時在其上加上一個“ $”符號。

您也可以從一個函數中完成所有這些操作,然后在需要時調用該函數。

   import java.text.DecimalFormat;

   DecimalFormat fmt = new DecimalFormat("0.###");

   public String currencyConverter(int money);
   {
       String cash = Integer.toString(money);

      return "$" + fmt.format(cash);


   }

或者你可以嘗試這個。

   DecimalFormat fmt = new DecimalFormat("$0.###");

我不確定它是否可以工作,但是我沒有辦法測試它的ATM。

您可以設置比例以格式化價格值,如下所示

BigDecimal price = new BigDecimal("134.65");
String decString = price.setScale(3).toPlainString();
System.out.println(" Formatted price  ==> "+decString);

和輸出是

格式化價格==> 134.650

還有另一種方法可以將您的當地貨幣返回,但我認為不支持巴西當地貨幣;

       String formated= NumberFormat.getCurrencyInstance().format(price);
//String formated= NumberFormat.getCurrencyInstance(Locale.FRANCE).format(price);
       System.out.println(" Formatted price  with local   ==> "+formated);

[更新]:要適應,您可以使用解析代碼替換以下一個班輪代碼

  String formatted=new BigDecimal(cleanString).setScale(3).toPlainString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM