我正在使用一个类将EditText的值格式化为货币。该类使用函数NumberFormat.getCurrencyInstance()。format((parsed / 100));格式化。这个课程使我的价值达到两个十分位置(R $ 2,00)。我希望它有三个小数位(R $ 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;
}
}
答案 0 :(得分:1)
我做到了,我使用了这个答案的代码:Correctly formatting currencies to more decimal places than the Locale specifies
这是我的代码:
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);
答案 1 :(得分:0)
你可以创建一个小数格式化器到三个小数位,并在需要的地方连接一个'$'符号。
您也可以从一个函数执行所有这些操作,然后在需要的地方调用该函数。
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.###");
我不确定它是否可行,但我无法测试它。
答案 2 :(得分: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();