Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用小数点后三位的货币掩码?_Java_Android_Android Edittext_Maskedtextbox - Fatal编程技术网

Java 如何使用小数点后三位的货币掩码?

Java 如何使用小数点后三位的货币掩码?,java,android,android-edittext,maskedtextbox,Java,Android,Android Edittext,Maskedtextbox,我正在使用一个类将EditText的值格式化为货币。此类使用函数NumberFormat.getCurrencyInstance().format((已解析/100));格式化。这门课有两个12月的名额(2,00雷亚尔)来衡量我的价值。我希望它有三位小数(R$2000)。它代表气体的价值。在巴西,我们用小数点后三位表示汽油 这是我正在使用的类: public class MascaraMonetaria implements TextWatcher{ final EditText mEditT

我正在使用一个类将EditText的值格式化为货币。此类使用函数NumberFormat.getCurrencyInstance().format((已解析/100));格式化。这门课有两个12月的名额(2,00雷亚尔)来衡量我的价值。我希望它有三位小数(R$2000)。它代表气体的价值。在巴西,我们用小数点后三位表示汽油

这是我正在使用的类:

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;

}

}

您只需创建一个小数点后三位的十进制格式化程序,并在需要时在其上添加“$”符号即可

   import java.text.DecimalFormat;

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

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

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


   }
您也可以从一个函数执行所有这些操作,然后在需要时调用该函数

   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.###");

我不确定它是否会工作,但我没有办法测试它

您可以设置比例以设置价格值的格式,如下所示

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();

我做到了,我用代码回答:

这是我的代码:

        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);

我如何在课堂上适应这个问题?第一个解决方案还是第二个?好的;您应该使用cleanString而不是s-更新了答案“不起作用”是什么:-)这是java代码,应该以相同的方式在任何地方运行。您得到的错误/输出是什么?你期望什么呢?每次键盘上有一个数字时,编辑文本中就会有很多数字。当我设置MinimumFractionDigits(3)时,它起作用了。我把答案贴在上面,这很有效。